Places API
Places API
Quickstart, parameters, layer selection, examples, and OpenAPI contract for the Good Enough Maps Places API.
Quickstart
Search places near a coordinate.
Good Enough Maps has one public search endpoint: GET /v1/places. Send the API key from your
backend, include search text and a location scope, and keep browser frontends away from the secret.
cURL GET /v1/places
curl -G "https://api.goodenoughmaps.com/v1/places" \
--data-urlencode "q=coffee" \
--data-urlencode "lat=40.7128" \
--data-urlencode "lon=-74.0060" \
--data-urlencode "radius_mi=25" \
--data-urlencode "limit=10" \
-H "Authorization: Bearer $GOOD_ENOUGH_MAPS_API_KEY"Endpoint
One route, scoped by search text and radius.
GET
/v1/places Returns Overture-backed place results, optionally merged with community and account-owned layers.
| Parameter | Required | Use |
|---|---|---|
q | Yes | Search text. Public normalization requires enough searchable letters or numbers for the selected mode. |
lat, lon | Yes | Latitude and longitude for the search center. |
radius_mi | No | Search radius in miles. Defaults to 25; maximum is 50. |
mode | No | Search mode: all, name, or address. Defaults to all. |
limit | No | Number of results to return. Defaults to 10; maximum is 20. |
layers | No | Explicit ordered layer stack, for example base,gem,account:client-a. |
layer_preset | No | Saved account preset. Mutually exclusive with layers. |
Server examples
Keep API keys on your backend.
const apiKey = process.env.GOOD_ENOUGH_MAPS_API_KEY;
if (!apiKey) throw new Error("GOOD_ENOUGH_MAPS_API_KEY is required");
const url = new URL("https://api.goodenoughmaps.com/v1/places");
url.search = new URLSearchParams({
q: "ramen",
lat: "35.6762",
lon: "139.6503",
radius_mi: "25",
mode: "all",
}).toString();
const response = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await response.json();import os
import requests
response = requests.get(
"https://api.goodenoughmaps.com/v1/places",
params={
"q": "coffee",
"lat": 40.7128,
"lon": -74.0060,
"radius_mi": 25,
"limit": 10,
},
headers={"Authorization": f"Bearer {os.environ['GOOD_ENOUGH_MAPS_API_KEY']}"},
timeout=10,
)
response.raise_for_status()
data = response.json()Next steps