Guides Places API

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();

Next steps

Choose the detail you need.