Vector Tiles
Mapbox Vector Tiles of OpenStreetMap, filtered by tag at request time. Draw only the cafes, only the bike lanes, only what your map needs.
How it works
Describe the data
Tag filters, layers and properties in the tile URL, or a PlazaQL search(...).
Plaza renders the tile
PostGIS ST_AsMVT over the Shortbread layers, clipped and simplified for the zoom level.
Your map draws it
Gzipped MVT with cache headers, ready for MapLibre, Mapbox GL or deck.gl.
See it in action
Live tiles, rendered from Plaza's database as you pan.
search(nwr, amenity: "cafe").fields("name", "cuisine")
Who uses this
Teams building with Vector Tiles.
Thematic maps
A map of only EV chargers, only wheelchair-accessible venues, only drinking water.
Data-heavy dashboards
Thousands of features per view without shipping a GeoJSON file to the browser.
Your own basemap
Plaza's style or yours, on Shortbread layers, credited to OpenStreetMap alone.
25
Shortbread layers
2-22
Zoom range
5,000
Free tiles / day
gzip
Compressed MVT
What you can build
Example apps powered by Vector Tiles.
Accessibility Map
Overlay every venue with a wheelchair tag on a light basemap.
Cycling Planner
Bike lanes and parking as tiles, routes from the directions API.
Store Locator
Your stores from a custom dataset, competitors from OSM tiles.
Start building
curl -g -H "X-API-Key: YOUR_API_KEY" "https://plaza.fyi/api/v1/tiles/14/4823/6160?tags[amenity]=cafe&properties=name,cuisine" --compressed -o cafes.mvt
View endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/tiles/:z/:x/:y | One vector tile; filter with tags[key]=value, layers, properties, element_types |
| GET | /api/v1/tiles.json | TileJSON 3.0 for the same filters (no API key) |
| GET | /api/v1/tiles/style.json | MapLibre style over the Shortbread layers (no API key) |
| POST | /api/v1/query | The same tile from PlazaQL: search(...).tile(z, x, y) |
How it compares
Common questions
How are tiles billed?
Each tile is one standard request against a paid plan's monthly allocation ($0.50 per 1,000 after that). The free plan has its own budget of 5,000 tiles a day, separate from its 500 standard requests. Tiles also get their own per-minute rate limit, from 120 a minute on free to 20K on Enterprise, because one map pan loads 10 to 30 tiles.
Is there a free, unmetered basemap?
Not yet. Today the basemap layers in our style are dynamic tiles too, metered like any other tile. A pre-built planet basemap you can load without a key is planned. Until then you can point the style at any Shortbread basemap and use Plaza only for the filtered overlay.
Which filters can I use?
tags[key]=value matches a tag exactly and tags[key]=* matches any value (up to 10, all must match). layers picks Shortbread layers, properties picks which tags land in each feature, and element_types limits the tile to nodes, ways or relations. Every one of them has a PlazaQL equivalent: search(node, amenity: "cafe").fields("name").tile(z, x, y, layers: [...]).
How fresh are the tiles?
They are rendered from the same database that answers every other Plaza request, which applies OpenStreetMap diffs daily. When a diff lands, cached tiles over the edited area are dropped on every server. Browsers may keep a tile for 5 minutes and shared caches for up to an hour (4 hours at zoom 10 and below).
Does it work with MapLibre and Mapbox GL?
Yes. The tiles are standard Mapbox Vector Tiles (spec 2.1). Point MapLibre at /api/v1/tiles/style.json, or add /api/v1/tiles.json as a vector source in your own style, and send your key with tile requests through transformRequest.