PlazaQL Query API

A spatial query language for OpenStreetMap โ€” filter, combine, and export in one request

How it works

1

Write your query

PlazaQL syntax โ€” clean, composable query language.

2

Plaza executes it

Parsed with tree-sitter, run against H3-indexed OSM data.

3

Get results

GeoJSON, CSV or NDJSON, streamed as it's produced.

See it in action

An example request and its response, drawn on the map.

terminal
$

Who uses this

Teams building with PlazaQL Query API.

Data extraction

Pull structured OSM data for analysis and research.

Custom maps

Query specific features for thematic map layers.

Automated pipelines

Integrate OSM queries into ETL and data pipelines.

4

Output formats

H3

Spatial index

1

Request per query

What you can build

Example apps powered by PlazaQL Query API.

Infrastructure Mapper

Query and visualize power lines, water systems, and roads.

PlazaQL

OSM Data Pipeline

Automated extraction of POI data for analytics dashboards.

PlazaQL Search

Urban Planner

Analyze building footprints and zoning within boundaries.

PlazaQL Isochrone

Start building

curl -X POST "https://plaza.fyi/api/v1/query" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": "$nyc = boundary(name: \"Manhattan\");\n$$ = search(node, amenity: \"hospital\").within($nyc);"
}'
View endpoints
Method Path Description
POST /api/v1/query Execute a PlazaQL query

How it compares

overpass-api.de: Shared public server, best effort
Plaza: Your own rate limit, per-plan timeouts
overpass-api.de: OSM XML or JSON
Plaza: GeoJSON, CSV or NDJSON
overpass-api.de: Rate limited to 2 concurrent
Plaza: Up to 10K/min on paid plans

Common questions

What output formats does PlazaQL support?

JSON (paginated GeoJSON, the default), streamed GeoJSON, CSV and NDJSON. Pick one with the format field of the request.

How does this differ from overpass-api.de?

Plaza runs PlazaQL against its own H3-indexed database. There's no shared queue: each key has its own rate limit, up to 10K/min on Enterprise, and each plan has a request timeout of 30 to 120 seconds.

Does Plaza support boundary queries and set operations?

Yes. Use boundary(name: "Berlin") to query by named boundaries, + and - for union and difference, and bind results to variables with $name = expr to reuse them.