{"openapi":"3.1.0","info":{"title":"TrustyData (BYOK) API","version":"0.1.0","description":"TrustyData (BYOK) lets an AI assistant read your own TrustyData data through the TrustyData API with a key you supply (TrustyData API key). Read-only: 8 tools (autocomplete_address, verify_address, get_address, find_addresses_nearby, autocomplete_locality, search_localities, search_companies, get_company). The BYOK key travels with each request, is used for that one call only and is never stored,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-trustydata.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-trustydata/docs"},"termsOfService":"https://connectorbay.com/byok-trustydata/terms"},"servers":[{"url":"https://byok-trustydata.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-trustydata/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/autocomplete_address":{"post":{"operationId":"autocomplete_address","summary":"Suggest French addresses from the national address base (BAN) while typing, ranked by score; returns address lines, post","description":"Suggest French addresses from the national address base (BAN) while typing, ranked by score; returns address lines, postal code, commune, INSEE code, BAN id and, depending on plan, coordinates and IRIS area. Use for \"Which French address matches '215 acacias sainte-euphemie'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Address text typed so far, for example '215 acacias sainte-euphemie'.","maxLength":200,"title":"Q","type":"string"}},"required":["q"],"title":"autocomplete_addressArguments","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/verify_address":{"post":{"operationId":"verify_address","summary":"Check a complete French address and get a verdict (match_exact, match_probable or no_results) with the standardized addr","description":"Check a complete French address and get a verdict (match_exact, match_probable or no_results) with the standardized address and BAN id. Only asks a question; nothing is stored. Use for \"Is '10 av Champs Elysee Paris' a valid French address\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"The address as entered, for example '10 av Champs Elysee Paris'.","maxLength":200,"title":"Q","type":"string"}},"required":["q"],"title":"verify_addressArguments","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_address":{"post":{"operationId":"get_address","summary":"Get the stored record of a resolved address by the id returned from autocomplete_address or verify_address. Use for \"Sho","description":"Get the stored record of a resolved address by the id returned from autocomplete_address or verify_address. Use for \"Show the record of address 9fdb209a-6862-4d1c-8ad7-aea35bd2cbd0\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"address_id":{"description":"Address id (UUID) from an autocomplete or verify answer.","maxLength":64,"title":"Address Id","type":"string"}},"required":["address_id"],"title":"get_addressArguments","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/find_addresses_nearby":{"post":{"operationId":"find_addresses_nearby","summary":"List BAN addresses around a free-text address within a radius in metres, nearest first, with distances (Growth plan or a","description":"List BAN addresses around a free-text address within a radius in metres, nearest first, with distances (Growth plan or above; pages of up to 200). Use for \"Which addresses are within 300 m of 1 rue de la Paix 75002 Paris\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"address":{"description":"Centre of the search as a free-text French address.","maxLength":200,"title":"Address","type":"string"},"radius_m":{"description":"Radius in metres.","maximum":1000000,"minimum":1,"title":"Radius M","type":"integer"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Results per page (default 100, maximum 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Offset from pagination.next_offset of the previous page (stops at 5000).","title":"Offset"}},"required":["address","radius_m"],"title":"find_addresses_nearbyArguments","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/autocomplete_locality":{"post":{"operationId":"autocomplete_locality","summary":"Suggest French communes by name, postal code or INSEE code while typing, with population, surface, density, department a","description":"Suggest French communes by name, postal code or INSEE code while typing, with population, surface, density, department and region. Use for \"Which commune is Wimereux\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Commune name, postal code or INSEE code typed so far.","maxLength":100,"title":"Q","type":"string"},"details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True (default) to include surface, elevation, density, department and region; false for a lighter answer.","title":"Details"}},"required":["q"],"title":"autocomplete_localityArguments","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_localities":{"post":{"operationId":"search_localities","summary":"Filter French communes by department, region and population range, with or without a name, to build a list such as all c","description":"Filter French communes by department, region and population range, with or without a name, to build a list such as all communes above 180,000 inhabitants in Ile-de-France. Use for \"Which Ile-de-France communes have more than 180000 inhabitants\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Optional commune name text.","title":"Q"},"department_code":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Department code, for example '75' or '2A'.","title":"Department Code"},"region_name":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Region name in capitals, for example 'ILE DE FRANCE'.","title":"Region Name"},"population_min":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Minimum population.","title":"Population Min"},"population_max":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum population.","title":"Population Max"},"details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True (default) to include surface, elevation, density, department and region; false for a lighter answer.","title":"Details"}},"title":"search_localitiesArguments","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_companies":{"post":{"operationId":"search_companies","summary":"Search French companies and establishments (SIRENE register) by name, SIREN or SIRET, with filters for city, postal code","description":"Search French companies and establishments (SIRENE register) by name, SIREN or SIRET, with filters for city, postal code, NAF activity code and active/closed status; paged. Use for \"Find the company TrustyData in France\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Name, acronym, trade name, SIREN or SIRET (2 to 200 characters).","title":"Q"},"city":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"City, fuzzy match.","title":"City"},"postal_code":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Exact postal code.","title":"Postal Code"},"naf_code":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Exact NAF activity code, for example 62.02A.","title":"Naf Code"},"status":{"anyOf":[{"enum":["A","F"],"type":"string"},{"type":"null"}],"default":null,"description":"Administrative status: A for active, F for closed.","title":"Status"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Results per page (1 to 100).","title":"Per Page"}},"title":"search_companiesArguments","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_company":{"post":{"operationId":"get_company","summary":"Get the record of a French establishment by SIRET (14 digits), or by SIREN (9 digits) for its head office: names, addres","description":"Get the record of a French establishment by SIRET (14 digits), or by SIREN (9 digits) for its head office: names, address, creation date, activity, legal form, headcount band and status. Use for \"Show the register record of SIRET 97988532400017\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"siret_or_siren":{"description":"SIRET (14 digits) or SIREN (9 digits).","maxLength":14,"title":"Siret Or Siren","type":"string"}},"required":["siret_or_siren"],"title":"get_companyArguments","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}}}}