Places API
Layer Selection
How layers work
Layer order is precedence order.
The default stack uses the Overture-backed base layer and the Open Places API community layer. Authenticated callers can also select account-owned layers or a saved preset. Higher layers win when they explicitly target a lower-layer place.
base, then optional open, then account layers. Explicit selection
Use layers for a specific ordered stack.
Use layers when a request needs deterministic layer membership. Account layers use the
account:<layer_slug> token and come last.
GET /v1/places?q=coffee&lat=40.7128&lon=-74.0060&layers=base,open,account:field-teamPresets
Use layer_preset for account defaults.
Presets are useful for production defaults, customer-specific views, or partner-managed records. A request can
use layers or layer_preset, but not both.
GET /v1/places?q=coffee&lat=40.7128&lon=-74.0060&layer_preset=productionOperations
Account layers can express product-specific changes.
| Operation | Effect in search |
|---|---|
| Create place | Adds an account-only place with an account-scoped public ID. |
| Update place field | Patches selected fields on a targeted lower-layer place while preserving the public ID. |
| Suppress place | Removes a targeted lower-layer place from the effective result set. |
| Mark closed, moved, or duplicate | Represents product-specific status without mutating the shared base layer. |
curl "https://api.openplacesapi.com/v1/places?q=coffee&lat=40.7128&lon=-74.0060&layers=base,open,account:client-a" \
-H "Authorization: Bearer $OPEN_PLACES_API_KEY"Management API
Use Control Plane Tokens for layer writes.
Public search API keys only authenticate /v1/places. External systems that create layers, write
entries, run imports, save presets, manage grants, or update API-key layer defaults should use scoped Control
Plane Tokens from the dashboard.
layers:read, layers:write, entries:write, imports:write,
presets:write, grants:write, and api_keys:write_defaults.
| Endpoint | Scope |
|---|---|
GET /v1/layers | layers:read |
POST /v1/layers, PATCH /v1/layers/:id, POST /v1/layers/:id/archive | layers:write |
POST /v1/layers/:id/entries, PATCH /v1/layers/:id/entries/:entryId | entries:write |
POST /v1/layers/:id/imports | imports:write |
POST/PATCH /v1/layer-presets | presets:write |
POST /v1/layers/:id/grants, POST /v1/layer-grants/:id/revoke | grants:write |
PATCH /v1/api-keys/:id/default-layer-preset | api_keys:write_defaults |
curl https://app.openplacesapi.com/v1/layers \
-H "Authorization: Bearer $OPEN_PLACES_API_CONTROL_TOKEN"curl https://app.openplacesapi.com/v1/layers \
-H "Authorization: Bearer $OPEN_PLACES_API_CONTROL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Field team","slug":"field-team"}'