OpenStreetMap API: Get address for coordinates
Turns 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.
Unofficial. Not affiliated with or endorsed by OpenStreetMap.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Detail optional
detail Level of place to return, for example street; defaults to address.
street
One of
address,street,city. Defaultaddress.- Language optional
language Preferred language for names and addresses, for example French or fr; defaults to English.
French
Default
English.- Latitude, required
latitude Latitude in decimal degrees, for example 48.8584.
48.8584
Number from -90 to 90.
- Longitude, required
longitude Longitude in decimal degrees, for example 2.2945.
2.2945
Number from -180 to 180.
Input as JSON
{ "detail": "street", "language": "French", "latitude": 48.8584, "longitude": 2.2945}Output
{ "city": "Paris", "road": "Avenue Gustave Eiffel", "type": "Pedestrian street", "country": "France", "postcode": "75007", "place_name": "Avenue Gustave Eiffel", "full_address": "Avenue Gustave Eiffel, Quartier du Gros-Caillou, Paris 7e Arrondissement, Paris, Île-de-France, France métropolitaine, 75007, France", "house_number": null, "neighbourhood": "Quartier du Gros-Caillou", "osm_object_id": 15920725, "osm_object_type": "way", "state_or_region": "Île-de-France", "openstreetmap_link": "https://www.openstreetmap.org/way/15920725" }Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"openstreetmap.org/get_address","input":{"detail":"street","language":"French","latitude":48.8584,"longitude":2.2945}}' # 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_address" , "input": { "detail": "street", "language": "French", "latitude": 48.8584, "longitude": 2.2945 }})# 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_address" , "input": { "detail": "street", "language": "French", "latitude": 48.8584, "longitude": 2.2945 } }), 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_address# with {"detail":"street","language":"French","latitude":48.8584,"longitude":2.2945}"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": [ "latitude", "longitude" ], "properties": { "detail": { "enum": [ "address", "street", "city" ], "type": "string", "default": "address", "description": "Level of place to return, for example street; defaults to address." }, "language": { "type": "string", "default": "English", "description": "Preferred language for names and addresses, for example French or fr; defaults to English." }, "latitude": { "type": "number", "maximum": 90, "minimum": -90, "description": "Latitude in decimal degrees, for example 48.8584." }, "longitude": { "type": "number", "maximum": 180, "minimum": -180, "description": "Longitude in decimal degrees, for example 2.2945." } }}Output schema
{ "type": "object", "required": [ "full_address", "place_name", "type", "house_number", "road", "neighbourhood", "city", "state_or_region", "postcode", "country", "openstreetmap_link", "osm_object_type", "osm_object_id" ], "properties": { "city": { "type": [ "string", "null" ], "description": "City or town." }, "road": { "type": [ "string", "null" ], "description": "Road or street name." }, "type": { "type": [ "string", "null" ], "description": "Type of mapped place in words." }, "country": { "type": [ "string", "null" ], "description": "Country." }, "postcode": { "type": [ "string", "null" ], "description": "Postal code." }, "place_name": { "type": [ "string", "null" ], "description": "Name of the mapped place, when available." }, "full_address": { "type": "string", "description": "The readable address." }, "house_number": { "type": [ "string", "null" ], "description": "Building or house number." }, "neighbourhood": { "type": [ "string", "null" ], "description": "Neighbourhood or quarter." }, "osm_object_id": { "type": [ "integer", "null" ], "description": "OpenStreetMap object ID." }, "osm_object_type": { "type": [ "string", "null" ], "description": "OpenStreetMap object type." }, "state_or_region": { "type": [ "string", "null" ], "description": "State or region." }, "openstreetmap_link": { "type": "string", "description": "Link to the place on OpenStreetMap." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
openstreetmap.org/get_address- Returns
- full address, place name, type, house number, road, neighbourhood, city, state or region, postcode, country, OpenStreetMap link
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_address with the inputs above.
Ask your agent
- What's the street address at 40.7484, -73.9857?
- Using OpenStreetMap, tell me which city the coordinates -33.8688, 151.2093 fall in.
- I have a GPS fix of 35.6595, 139.7005 from a photo. What street is that on? Give me the names in Japanese.
- Reverse geocode 51.5007, -0.1246 to a full address with postcode, and include the OpenStreetMap link.
- My delivery driver sent me 52.5200, 13.4050. What's the neighbourhood and house number there? German names please.
See more
All OpenStreetMap methodsFinds map coordinates and address details for an address or place on OpenStreetMap, optionally restricted to a country.
openstreetmap.org/get_coordinatesFinds 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_placeMatches 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_detailsGets 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 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_postcodeFinds postal codes, place names and coordinates for a town and state or region in a country covered by Zippopotam.us.
zippopotam.us/search_postal_codesFinds Open Charge Map charging locations near an address, city, or postcode, nearest first.
openchargemap.org/search_chargers