OpenStreetMap API: Get coordinates for an address
Finds map coordinates and address details for an address or place on OpenStreetMap, optionally restricted to a country.
Unofficial. Not affiliated with or endorsed by OpenStreetMap.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Address, required
address Street address, place, or landmark to locate; for example, 10 Downing Street, London.
10 Downing Street, London
- Country optional
country Country name or two-letter country code to restrict the search; for example, France or FR. Leave blank for any country.
(default)
- Max Results optional
max_results Maximum matches to return, from 1 to 10; for example, 3.
1 (default)
Whole number from 1 to 10.
Input as JSON
{ "address": "10 Downing Street, London"}Output
{ "matches": [ { "city": "City of Westminster", "road": "Downing Street", "type": "government", "country": "United Kingdom", "latitude": 51.5034878, "postcode": "SW1A 2AA", "longitude": -0.1276965, "bounding_box": { "east": -0.1273088, "west": -0.1277991, "north": 51.5036913, "south": 51.5033074 }, "full_address": "10 Downing Street, 10, Downing Street, Westminster, Covent Garden, City of Westminster, Greater London, England, SW1A 2AA, United Kingdom", "house_number": "10", "osm_object_id": 1879842, "osm_object_type": "relation", "state_or_region": "England", "openstreetmap_url": "https://www.openstreetmap.org/relation/1879842" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"openstreetmap.org/get_coordinates","input":{"address":"10 Downing Street, London"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "openstreetmap.org/get_coordinates" , "input": { "address": "10 Downing Street, London" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "openstreetmap.org/get_coordinates" , "input": { "address": "10 Downing Street, London" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run openstreetmap.org/get_coordinates# with {"address":"10 Downing Street, London"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "address" ], "properties": { "address": { "type": "string", "minLength": 1, "description": "Street address, place, or landmark to locate; for example, 10 Downing Street, London." }, "country": { "type": "string", "default": "", "description": "Country name or two-letter country code to restrict the search; for example, France or FR. Leave blank for any country." }, "max_results": { "type": "integer", "default": 1, "maximum": 10, "minimum": 1, "description": "Maximum matches to return, from 1 to 10; for example, 3." } }}Output schema
{ "type": "object", "required": [ "matches" ], "properties": { "matches": { "type": "array", "items": { "type": "object", "required": [ "full_address", "latitude", "longitude", "type", "house_number", "road", "city", "state_or_region", "postcode", "country", "openstreetmap_url", "osm_object_type", "osm_object_id", "bounding_box" ], "properties": { "city": { "type": [ "string", "null" ], "description": "City or town, when available." }, "road": { "type": [ "string", "null" ], "description": "Street or road, when available." }, "type": { "type": "string", "description": "Kind of place in words." }, "country": { "type": [ "string", "null" ], "description": "Country name, when available." }, "latitude": { "type": "number", "description": "Latitude in decimal degrees." }, "postcode": { "type": [ "string", "null" ], "description": "Postal code, when available." }, "longitude": { "type": "number", "description": "Longitude in decimal degrees." }, "bounding_box": { "type": [ "object", "null" ], "required": [ "south", "north", "west", "east" ], "properties": { "east": { "type": "number" }, "west": { "type": "number" }, "north": { "type": "number" }, "south": { "type": "number" } }, "description": "Bounding box in decimal degrees, when available.", "additionalProperties": false }, "full_address": { "type": "string", "description": "Full formatted address." }, "house_number": { "type": [ "string", "null" ], "description": "House number, when available." }, "osm_object_id": { "type": [ "integer", "null" ], "description": "OpenStreetMap object ID, when available." }, "osm_object_type": { "type": [ "string", "null" ], "description": "OpenStreetMap object kind (node, way, or relation), when available." }, "state_or_region": { "type": [ "string", "null" ], "description": "State or region, when available." }, "openstreetmap_url": { "type": "string", "description": "Link to the place on OpenStreetMap." } }, "additionalProperties": false }, "description": "Matching locations, best first." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
openstreetmap.org/get_coordinates- Returns
- coordinates, full address, place type, address parts, OpenStreetMap link, bounding box
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method openstreetmap.org/get_coordinates with the inputs above.
Ask your agent
- What are the latitude and longitude of 10 Downing Street, London?
- Find the map coordinates for the Eiffel Tower and show me its full address details, limited to France.
- I need the bounding box and place type for Lake Titicaca, up to 3 matches.
- Where exactly is 221B Baker Street located? Give me coordinates and address parts.
- Locate the Sydney Opera House in AU and give me an OpenStreetMap link for it.
See more
All OpenStreetMap methodsTurns map coordinates into a readable address with OpenStreetMap Nominatim, at address, street or city detail, with the address parts and an OpenStreetMap link. Results reflect the nearest mapped feature.
openstreetmap.org/get_addressFinds named places or kinds of places in a city or area, in search order, using OpenStreetMap Nominatim. Results may be fewer than requested. Data © OpenStreetMap contributors (ODbL).
openstreetmap.org/search_placesLooks up a public Google Maps place by name and location and returns its profile: address, rating, hours, phone, website and photos.
google.com/get_placeGets the Walk, Transit and Bike Scores and neighborhood details for a street address. Unpublished scores are null; unresolved or mismatched addresses are not found.
walkscore.com/get_walk_scoreLooks up the places, regions and coordinates for a postal code in a supported country on Zippopotam.us.
zippopotam.us/get_postal_codeMatches a US street address and returns its city or place, county, state, ZIP code, census tract, congressional and state legislative districts, coordinates and FIPS codes. Districts follow the Census Geocoder's current geography vintage and may differ from sitting representation.
census.gov/get_address_detailsFinds postal codes, place names and coordinates for a town and state or region in a country covered by Zippopotam.us.
zippopotam.us/search_postal_codesLooks up a UK postcode on Postcodes.io, including its location, administrative areas and whether it is still in use. Retired postcodes return location and retirement year only.
postcodes.io/get_postcode