{"openapi":"3.1.0","info":{"title":"ATTOM (BYOK) API","version":"0.1.0","description":"ATTOM (BYOK) lets an AI assistant read your own ATTOM data through the ATTOM API with a key you supply (ATTOM API key). Read-only: 10 tools (get_property_detail, get_property_basic_profile, get_property_expanded_profile, search_property_snapshots, get_assessment_detail, get_sale_detail, get_sales_history, get_avm_detail, search_schools, get_sales_trend). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-attom.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-attom/docs"},"termsOfService":"https://connectorbay.com/byok-attom/terms"},"servers":[{"url":"https://byok-attom.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-attom/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_property_detail":{"post":{"operationId":"get_property_detail","summary":"Get the detailed property record for one property named by ATTOM id or by address. The documentation lists no response f","description":"Get the detailed property record for one property named by ATTOM id or by address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"Show the ATTOM property detail for 468 Sequoia Dr, Smyrna, DE 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_property_detailArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_property_basic_profile":{"post":{"operationId":"get_property_basic_profile","summary":"Get the basic profile of one property named by ATTOM id or address. The documentation lists no response fields, so the f","description":"Get the basic profile of one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"Give me a basic profile of 468 Sequoia Dr, Smyrna, DE 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_property_basic_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_property_expanded_profile":{"post":{"operationId":"get_property_expanded_profile","summary":"Get the expanded profile of one property named by ATTOM id or address. The documentation lists no response fields, so th","description":"Get the expanded profile of one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"Give me the expanded ATTOM profile of 468 Sequoia Dr, Smyrna, DE 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_property_expanded_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_property_snapshots":{"post":{"operationId":"search_property_snapshots","summary":"Search properties in a ZIP code or around a point and get a snapshot of each, filtered by type, bedrooms and year built;","description":"Search properties in a ZIP code or around a point and get a snapshot of each, filtered by type, bedrooms and year built; up to 100 records per response. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"List single-family homes with 3 or 4 bedrooms in ZIP 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"postal_code":{"anyOf":[{"maxLength":5,"type":"string"},{"type":"null"}],"default":null,"description":"Five-digit ZIP code to search in.","title":"Postal Code"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Latitude of a radius search centre (radius is then required).","title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Longitude of a radius search centre.","title":"Longitude"},"radius":{"anyOf":[{"maximum":20,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Search radius in miles (the documentation gives 5 as default and 20 as the largest).","title":"Radius"},"property_type":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Property type filter, for example 'SFR' or 'APARTMENT'; several can be joined with a pipe.","title":"Property Type"},"min_beds":{"anyOf":[{"maximum":50,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Minimum bedrooms.","title":"Min Beds"},"max_beds":{"anyOf":[{"maximum":50,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum bedrooms.","title":"Max Beds"},"min_year_built":{"anyOf":[{"maximum":2100,"minimum":1600,"type":"integer"},{"type":"null"}],"default":null,"description":"Earliest year built.","title":"Min Year Built"},"max_year_built":{"anyOf":[{"maximum":2100,"minimum":1600,"type":"integer"},{"type":"null"}],"default":null,"description":"Latest year built.","title":"Max Year Built"}},"title":"search_property_snapshotsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_assessment_detail":{"post":{"operationId":"get_assessment_detail","summary":"Get the assessment detail (assessed values and taxes) of one property named by ATTOM id or address. The documentation li","description":"Get the assessment detail (assessed values and taxes) of one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"What is the assessed value and tax of 468 Sequoia Dr, Smyrna, DE 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_assessment_detailArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_sale_detail":{"post":{"operationId":"get_sale_detail","summary":"Get the most recent sale of one property named by ATTOM id or address. The documentation lists no response fields, so th","description":"Get the most recent sale of one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"When did 468 Sequoia Dr, Smyrna, DE 19977 last sell and for how much\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_sale_detailArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_sales_history":{"post":{"operationId":"get_sales_history","summary":"Get the sales history of one property named by ATTOM id or address. The documentation lists no response fields, so the f","description":"Get the sales history of one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"Show the sales history of 468 Sequoia Dr, Smyrna, DE 19977\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_sales_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_avm_detail":{"post":{"operationId":"get_avm_detail","summary":"Get ATTOM's automated valuation model (AVM) detail for one property named by ATTOM id or address. The documentation list","description":"Get ATTOM's automated valuation model (AVM) detail for one property named by ATTOM id or address. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"What does ATTOM estimate 468 Sequoia Dr, Smyrna, DE 19977 is worth\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"attom_id":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM's own property id (the most exact way to name a property).","title":"Attom Id"},"address1":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Street line, for example '468 SEQUOIA DR'; use together with address2.","title":"Address1"},"address2":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"City, state and ZIP line, for example 'SMYRNA, DE 19977'.","title":"Address2"}},"title":"get_avm_detailArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_schools":{"post":{"operationId":"search_schools","summary":"Search schools in an area identified by an ATTOM geoIdV4 code, or around a latitude and longitude with a radius. The doc","description":"Search schools in an area identified by an ATTOM geoIdV4 code, or around a latitude and longitude with a radius. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"Which schools are within 2 miles of 39.2904, -75.6054\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"geo_id_v4":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"ATTOM geoIdV4 area code (from ATTOM's location lookup).","title":"Geo Id V4"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Latitude of the search centre.","title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Longitude of the search centre.","title":"Longitude"},"radius":{"anyOf":[{"maximum":20,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Search radius in miles.","title":"Radius"}},"title":"search_schoolsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_sales_trend":{"post":{"operationId":"get_sales_trend","summary":"Get sales trend statistics for an area identified by an ATTOM geoIdV4 code over a range of years, quarters or months. Th","description":"Get sales trend statistics for an area identified by an ATTOM geoIdV4 code over a range of years, quarters or months. The documentation lists no response fields, so the full ATTOM answer is returned (trimmed to fit). Use for \"How have sales trended in this ATTOM area since 2023\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"geo_id_v4":{"description":"ATTOM geoIdV4 area code.","maxLength":60,"title":"Geo Id V4","type":"string"},"interval":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Grouping interval, for example yearly, quarterly or monthly.","title":"Interval"},"start_year":{"anyOf":[{"maximum":2100,"minimum":1990,"type":"integer"},{"type":"null"}],"default":null,"description":"First year.","title":"Start Year"},"end_year":{"anyOf":[{"maximum":2100,"minimum":1990,"type":"integer"},{"type":"null"}],"default":null,"description":"Last year.","title":"End Year"},"start_quarter":{"anyOf":[{"maximum":4,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"First quarter (1 to 4).","title":"Start Quarter"},"end_quarter":{"anyOf":[{"maximum":4,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Last quarter (1 to 4).","title":"End Quarter"},"start_month":{"anyOf":[{"maximum":12,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"First month (1 to 12).","title":"Start Month"},"end_month":{"anyOf":[{"maximum":12,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Last month (1 to 12).","title":"End Month"},"property_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Property type filter.","title":"Property Type"},"transfer_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Transfer type filter.","title":"Transfer Type"}},"required":["geo_id_v4"],"title":"get_sales_trendArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}