{"openapi":"3.1.0","info":{"title":"Voyage API","version":"0.1.0","description":"Geocoding, routes with turn-by-turn steps, travel matrices, stop optimisation, places nearby, place details, Wikivoyage guides, place snapshots — maps and travel on OpenStreetMap.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://voyage.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/voyage/docs"},"termsOfService":"https://connectorbay.com/voyage/terms"},"servers":[{"url":"https://voyage.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/voyage/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/geocode":{"post":{"operationId":"geocode","summary":"Find places by name or address (OpenStreetMap/Nominatim, Photon fallback): coordinates, type, structured address,","description":"Find places by name or address (OpenStreetMap/Nominatim, Photon fallback): coordinates, type, structured address,\n    OSM id and link, bounding box. Use for \"where is X\", \"coordinates of Y\", \"find the address of Z\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Address, landmark, business or place name.","examples":["Eiffel Tower","1600 Amphitheatre Parkway, Mountain View","Shibuya Station"],"title":"Query","type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"ISO country code to restrict to.","examples":["fr"],"title":"Country"},"max_results":{"default":5,"maximum":10,"minimum":1,"title":"Max Results","type":"integer"}},"required":["query"],"title":"geocodeArguments","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/reverse_geocode":{"post":{"operationId":"reverse_geocode","summary":"What is at a coordinate: the nearest address or place with structured components, at the level asked for","description":"What is at a coordinate: the nearest address or place with structured components, at the level asked for\n    (building/address, street, city, country). Use for \"what's at 48.8583, 2.2945\", \"which city is this\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"latitude":{"examples":[48.8583],"maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"examples":[2.2945],"maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"detail":{"default":"address","description":"'address' (default), 'street', 'city' or 'country'.","examples":["address"],"title":"Detail","type":"string"}},"required":["latitude","longitude"],"title":"reverse_geocodeArguments","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/route":{"post":{"operationId":"route","summary":"Directions between places on the OpenStreetMap road network: total distance and time, per-leg summary, and","description":"Directions between places on the OpenStreetMap road network: total distance and time, per-leg summary, and\n    turn-by-turn steps with road names; optional via-points and alternatives. Use for \"how long to drive from A to B\",\n    \"walking directions from the hotel to the station\", \"route via Palo Alto\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"origin":{"description":"Start: address, place name or 'lat,lon'.","examples":["San Francisco","48.8583,2.2945"],"title":"Origin","type":"string"},"destination":{"description":"End: address, place name or 'lat,lon'.","examples":["San Jose"],"title":"Destination","type":"string"},"mode":{"default":"driving","description":"driving (default), walking or cycling.","examples":["driving","walking"],"title":"Mode","type":"string"},"via":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Optional intermediate stops in order.","examples":[["Palo Alto"]],"title":"Via"},"steps":{"default":true,"description":"Include turn-by-turn instructions.","title":"Steps","type":"boolean"},"alternatives":{"default":false,"description":"Also return alternative routes when available.","title":"Alternatives","type":"boolean"}},"required":["origin","destination"],"title":"routeArguments","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/travel_matrix":{"post":{"operationId":"travel_matrix","summary":"Travel time and distance between every pair of places (a matrix), for comparing options or planning. Use for","description":"Travel time and distance between every pair of places (a matrix), for comparing options or planning. Use for\n    \"which of these three hotels is closest to the office\", \"drive times between Berlin, Hamburg and Munich\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"places":{"description":"2–10 places (addresses, names or 'lat,lon').","examples":[["Berlin","Hamburg","Munich"]],"items":{"type":"string"},"title":"Places","type":"array"},"mode":{"default":"driving","description":"driving, walking or cycling.","examples":["driving"],"title":"Mode","type":"string"}},"required":["places"],"title":"travel_matrixArguments","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/optimize_stops":{"post":{"operationId":"optimize_stops","summary":"The best order to visit several stops (travelling-salesman via OSRM): ordered itinerary with leg distances and","description":"The best order to visit several stops (travelling-salesman via OSRM): ordered itinerary with leg distances and\n    times and the total. Use for \"plan the shortest route to see these five places\", \"order these deliveries\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stops":{"description":"3–10 stops; the first is the start.","examples":[["Hotel Lisboa","Belém Tower","Jerónimos Monastery","Alfama","Time Out Market"]],"items":{"type":"string"},"title":"Stops","type":"array"},"mode":{"default":"driving","description":"driving, walking or cycling.","examples":["walking"],"title":"Mode","type":"string"},"round_trip":{"default":true,"description":"Return to the start at the end.","title":"Round Trip","type":"boolean"},"fixed_end":{"default":false,"description":"Keep the last stop as the final destination (implies no round trip).","title":"Fixed End","type":"boolean"}},"required":["stops"],"title":"optimize_stopsArguments","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/nearby":{"post":{"operationId":"nearby","summary":"Places of a category around a point, nearest first, from OpenStreetMap (Overpass, Nominatim fallback): name,","description":"Places of a category around a point, nearest first, from OpenStreetMap (Overpass, Nominatim fallback): name,\n    distance and direction, address, opening hours, phone, website, cuisine, wheelchair access and OSM link. Use for\n    \"pharmacies near me\", \"cafés within 500 m of the station\", \"EV chargers near Lisbon airport\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"Centre: address, place name or 'lat,lon'.","examples":["Lisbon","38.7223,-9.1393"],"title":"Place","type":"string"},"category":{"description":"cafe, restaurant, pharmacy, hospital, atm, bank, fuel, charging station, supermarket, hotel, museum, park, train station, bus stop, toilets, parking… (60+).","examples":["pharmacy","cafe"],"title":"Category","type":"string"},"radius_m":{"default":1000,"description":"Search radius in metres.","maximum":20000,"minimum":100,"title":"Radius M","type":"integer"},"max_results":{"default":12,"maximum":40,"minimum":1,"title":"Max Results","type":"integer"}},"required":["place","category"],"title":"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/place_details":{"post":{"operationId":"place_details","summary":"Everything OpenStreetMap knows about one place: full address, category, coordinates, and tags such as opening","description":"Everything OpenStreetMap knows about one place: full address, category, coordinates, and tags such as opening\n    hours, phone, website, cuisine, wheelchair access, levels, operator, Wikipedia link. Use after nearby/geocode or\n    for \"opening hours of Café A Brasileira\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"osm_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"OSM id from another tool, e.g. 'N2503425772' or 'W5013364'.","examples":["W5013364"],"title":"Osm Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Or a place/business name to look up (first match).","examples":["Café A Brasileira, Lisbon"],"title":"Name"}},"title":"place_detailsArguments","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/city_guide":{"post":{"operationId":"city_guide","summary":"The Wikivoyage travel guide for a destination, by section (Understand, Get in, Get around, See, Do, Buy, Eat,","description":"The Wikivoyage travel guide for a destination, by section (Understand, Get in, Get around, See, Do, Buy, Eat,\n    Drink, Sleep, Stay safe, Connect, Go next) as plain text with the article link. Use for \"what should I see in\n    Lisbon\", \"how do I get around Kyoto\", \"is Bali safe\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"City, region or destination as titled on Wikivoyage.","examples":["Lisbon","Kyoto","Bali"],"title":"Place","type":"string"},"sections":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Sections to return: Understand, Get in, Get around, See, Do, Buy, Eat, Drink, Sleep, Stay safe, Connect, Go next. Default: See, Do, Eat, Get around, Stay safe.","examples":[["See","Eat"]],"title":"Sections"},"max_chars_per_section":{"default":2500,"maximum":8000,"minimum":300,"title":"Max Chars Per Section","type":"integer"}},"required":["place"],"title":"city_guideArguments","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/place_snapshot":{"post":{"operationId":"place_snapshot","summary":"A place right now: resolved location and country, time zone and local time, elevation, current weather with","description":"A place right now: resolved location and country, time zone and local time, elevation, current weather with\n    today's high/low and rain chance, sunrise and sunset. Use for \"what time is it in Tokyo\", \"weather in Reykjavik\n    now\", \"how high is Cusco\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"City, address or 'lat,lon'.","examples":["Tokyo","Reykjavik"],"title":"Place","type":"string"}},"required":["place"],"title":"place_snapshotArguments","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}}}}