{"openapi":"3.1.0","info":{"title":"BC Address Geocoder (BYOK) API","version":"0.1.0","description":"BC Address Geocoder (BYOK) lets an AI assistant read your own BC Address Geocoder data through the BC Address Geocoder API with a key you supply (BC API Services Portal API key). Read-only: 9 tools (geocode_address, autocomplete_address, nearest_site, sites_near_point, sites_within_area, get_site, nearest_intersection, find_occupant, nearest_occupant). 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-bc-geocoder.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bc-geocoder/docs"},"termsOfService":"https://connectorbay.com/byok-bc-geocoder/terms"},"servers":[{"url":"https://byok-bc-geocoder.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bc-geocoder/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/geocode_address":{"post":{"operationId":"geocode_address","summary":"Standardize and geocode a British Columbia address or intersection; returns best matches with score, match precision, si","description":"Standardize and geocode a British Columbia address or intersection; returns best matches with score, match precision, site ID and coordinates (lon, lat). Use for \"Where is 525 Superior St in Victoria, BC\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"address_string":{"description":"Civic or intersection address as one string, for example '525 Superior St, Victoria, BC' (a partial address when completing).","maxLength":200,"title":"Address String","type":"string"},"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many matches to return (default 5, at most 50).","title":"Max Results"},"min_score":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Lowest match score (1 to 100) a result needs.","title":"Min Score"},"localities":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated BC locality names the match must belong to, for example 'Victoria,Saanich'.","title":"Localities"},"location_descriptor":{"anyOf":[{"enum":["any","accessPoint","frontDoorPoint","parcelPoint","rooftopPoint","routingPoint"],"type":"string"},{"type":"null"}],"default":"any","description":"Which kind of point to return: any, accessPoint, frontDoorPoint, parcelPoint, rooftopPoint or routingPoint.","title":"Location Descriptor"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"},"interpolation":{"anyOf":[{"enum":["adaptive","linear","none"],"type":"string"},{"type":"null"}],"default":"adaptive","description":"Interpolation for access points: adaptive, linear or none.","title":"Interpolation"}},"required":["address_string"],"title":"geocode_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/autocomplete_address":{"post":{"operationId":"autocomplete_address","summary":"Suggest completions for a partial British Columbia address (type-ahead); returns best prefix matches with coordinates. U","description":"Suggest completions for a partial British Columbia address (type-ahead); returns best prefix matches with coordinates. Use for \"Complete the address '525 supe' in BC\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"address_string":{"description":"Civic or intersection address as one string, for example '525 Superior St, Victoria, BC' (a partial address when completing).","maxLength":200,"title":"Address String","type":"string"},"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many matches to return (default 5, at most 50).","title":"Max Results"},"min_score":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Lowest match score (1 to 100) a result needs.","title":"Min Score"},"localities":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated BC locality names the match must belong to, for example 'Victoria,Saanich'.","title":"Localities"},"location_descriptor":{"anyOf":[{"enum":["any","accessPoint","frontDoorPoint","parcelPoint","rooftopPoint","routingPoint"],"type":"string"},{"type":"null"}],"default":"any","description":"Which kind of point to return: any, accessPoint, frontDoorPoint, parcelPoint, rooftopPoint or routingPoint.","title":"Location Descriptor"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"},"auto_complete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"Fixed to true for this tool: the address string is treated as a partial address.","title":"Auto Complete"}},"required":["address_string"],"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/nearest_site":{"post":{"operationId":"nearest_site","summary":"Reverse geocode: find the nearest known site (address) to a longitude,latitude point in British Columbia. Use for \"What ","description":"Reverse geocode: find the nearest known site (address) to a longitude,latitude point in British Columbia. Use for \"What address is at -122.8491387,49.1914645\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"point":{"description":"Search point as 'longitude,latitude' in WGS 84, for example '-122.8491387,49.1914645'.","maxLength":60,"title":"Point","type":"string"},"max_distance":{"anyOf":[{"maximum":1000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Largest search distance in metres; unlimited when omitted.","title":"Max Distance"},"location_descriptor":{"anyOf":[{"enum":["any","accessPoint","frontDoorPoint","parcelPoint","rooftopPoint","routingPoint"],"type":"string"},{"type":"null"}],"default":"any","description":"Which kind of point to return: any, accessPoint, frontDoorPoint, parcelPoint, rooftopPoint or routingPoint.","title":"Location Descriptor"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"},"only_civic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to ignore sites without a civic address.","title":"Only Civic"}},"required":["point"],"title":"nearest_siteArguments","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/sites_near_point":{"post":{"operationId":"sites_near_point","summary":"List sites (addresses) near a longitude,latitude point, closest first. Use for \"Which addresses are within 200 m of -123","description":"List sites (addresses) near a longitude,latitude point, closest first. Use for \"Which addresses are within 200 m of -123.3656,48.4284\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"point":{"description":"Search point as 'longitude,latitude' in WGS 84.","maxLength":60,"title":"Point","type":"string"},"max_distance":{"anyOf":[{"maximum":1000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Largest search distance in metres; unlimited when omitted.","title":"Max Distance"},"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many sites to return (default 5, at most 50).","title":"Max Results"},"location_descriptor":{"anyOf":[{"enum":["any","accessPoint","frontDoorPoint","parcelPoint","rooftopPoint","routingPoint"],"type":"string"},{"type":"null"}],"default":"any","description":"Which kind of point to return: any, accessPoint, frontDoorPoint, parcelPoint, rooftopPoint or routingPoint.","title":"Location Descriptor"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"},"only_civic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to ignore sites without a civic address.","title":"Only Civic"}},"required":["point"],"title":"sites_near_pointArguments","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/sites_within_area":{"post":{"operationId":"sites_within_area","summary":"List sites (addresses) inside a bounding box. Use for \"List addresses inside the box -126.0793,49.7628,-126.0163,49.7907","description":"List sites (addresses) inside a bounding box. Use for \"List addresses inside the box -126.0793,49.7628,-126.0163,49.7907\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bbox":{"description":"Bounding box as 'xmin,ymin,xmax,ymax' in longitude/latitude.","maxLength":100,"title":"Bbox","type":"string"},"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many sites to return (default 10, at most 100).","title":"Max Results"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"},"only_civic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to ignore sites without a civic address.","title":"Only Civic"}},"required":["bbox"],"title":"sites_within_areaArguments","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_site":{"post":{"operationId":"get_site","summary":"Get one site (address) by its site ID. Use for \"Show site 123456\".","description":"Get one site (address) by its site ID. Use for \"Show site 123456\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_id":{"description":"Site identifier from a geocode result (unique but not permanent).","maxLength":200,"title":"Site Id","type":"string"},"brief":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only basic match and address details.","title":"Brief"}},"required":["site_id"],"title":"get_siteArguments","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/nearest_intersection":{"post":{"operationId":"nearest_intersection","summary":"Find the nearest road intersection to a longitude,latitude point. Use for \"What is the nearest intersection to -122.377,","description":"Find the nearest road intersection to a longitude,latitude point. Use for \"What is the nearest intersection to -122.377,50.121\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"point":{"description":"Search point as 'longitude,latitude' in WGS 84.","maxLength":60,"title":"Point","type":"string"},"max_distance":{"anyOf":[{"maximum":1000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Largest search distance in metres; unlimited when omitted.","title":"Max Distance"},"min_degree":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":2,"description":"Smallest intersection degree to include (a dead end is 1; default 2).","title":"Min Degree"},"max_degree":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Largest intersection degree to include (default 100).","title":"Max Degree"}},"required":["point"],"title":"nearest_intersectionArguments","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_occupant":{"post":{"operationId":"find_occupant","summary":"Search public-sector occupants (schools, courthouses and similar) by name, optionally with '** locality', returning name","description":"Search public-sector occupants (schools, courthouses and similar) by name, optionally with '** locality', returning name, category, website and address. Use for \"Find Sir James Douglas Elementary in Victoria\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"address_string":{"description":"Occupant name, or 'Occupant name ** address', for example 'Sir James Douglas Elementary ** Victoria'.","maxLength":200,"title":"Address String","type":"string"},"tags":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Semicolon-separated tags to restrict the search, for example 'schools;courts'.","title":"Tags"},"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many occupants to return (default 5, at most 50).","title":"Max Results"}},"required":["address_string"],"title":"find_occupantArguments","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/nearest_occupant":{"post":{"operationId":"nearest_occupant","summary":"Find the nearest occupant (for example a courthouse or school, filtered by tag) to a longitude,latitude point. Use for \"","description":"Find the nearest occupant (for example a courthouse or school, filtered by tag) to a longitude,latitude point. Use for \"What is the nearest courthouse to -123.7064038,48.8498537\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"point":{"description":"Search point as 'longitude,latitude' in WGS 84.","maxLength":60,"title":"Point","type":"string"},"tags":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Semicolon-separated tags to restrict the search, for example 'courts'.","title":"Tags"},"max_distance":{"anyOf":[{"maximum":1000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Largest search distance in metres; unlimited when omitted.","title":"Max Distance"}},"required":["point"],"title":"nearest_occupantArguments","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}}}}