Places API
Places API
Quickstart, parameters, layer selection, examples, and OpenAPI contract for the Open Places API.
Quickstart
Search places near a coordinate.
Open Places API has one public search endpoint: GET /v1/places. Send the API key from your
backend, include a location scope, and keep browser frontends away from the secret. Use q for text
search, or use category to list every matching category in an area.
cURL GET /v1/places
curl -G "https://api.openplacesapi.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" \
--data-urlencode "min_confidence=0.85" \
-H "Authorization: Bearer $OPEN_PLACES_API_KEY" cURL category browse
curl -G "https://api.openplacesapi.com/v1/places" \
--data-urlencode "category=cafe" \
--data-urlencode "lat=40.7128" \
--data-urlencode "lon=-74.0060" \
--data-urlencode "radius_mi=25" \
--data-urlencode "limit=50" \
--data-urlencode "offset=0" \
-H "Authorization: Bearer $OPEN_PLACES_API_KEY"Endpoint
One route, scoped by radius.
GET
/v1/places Returns Overture-backed place results, optionally merged with community and account-owned layers.
| Parameter | Required | Use |
|---|---|---|
q | Usually | Search text. Required unless category is supplied. |
category | No | Exact Overture category string such as cafe. When supplied, q becomes optional. |
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; text search max 20, category browse max 50. |
offset | No | Category-browse pagination offset, capped at 950. Each page counts as one search. |
min_confidence | No | Minimum Overture confidence score from 0 to 1. No default filter is applied. |
layers | No | Explicit ordered layer stack, for example base,open,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.OPEN_PLACES_API_KEY;
if (!apiKey) throw new Error("OPEN_PLACES_API_KEY is required");
const url = new URL("https://api.openplacesapi.com/v1/places");
url.search = new URLSearchParams({
q: "ramen",
lat: "35.6762",
lon: "139.6503",
radius_mi: "25",
mode: "all",
min_confidence: "0.85",
}).toString();
const response = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await response.json();import os
import requests
response = requests.get(
"https://api.openplacesapi.com/v1/places",
params={
"q": "coffee",
"lat": 40.7128,
"lon": -74.0060,
"radius_mi": 25,
"limit": 10,
"min_confidence": 0.85,
},
headers={"Authorization": f"Bearer {os.environ['OPEN_PLACES_API_KEY']}"},
timeout=10,
)
response.raise_for_status()
data = response.json()Next steps
Choose the detail you need.
Layer selection Control base, community, and account-owned records. Errors and quota Handle validation, auth, quota, coverage, and rate limits. API reference Review parameters, responses, headers, and the OpenAPI contract. Data quality Understand confidence scores, filtering, missing fields, and coordinate caveats. Data rights Review cache, storage, redistribution, and open-license positioning.