Navvo
API Reference

Geo 3D Details

3D building, road, vegetation, and infrastructure features for rich map scenes.

Geo 3D Details

Detailed 3D-map feature data — buildings & building parts, roads, vegetation, water, barriers, power infrastructure, and more — extracted from Navvo's map data index for the Middle East. This powers Navvo's navvo3d map scene.

Scope required: geo

The geo scope is not enabled on new keys by default — request it explicitly when creating your key (scopes: { "geo": true }). See Authentication.
Despite the tile-style {z}/{x}/{y} path, these endpoints return a JSON array of features, not a binary vector tile. Each feature's way geometry is a WKT string reprojected to EPSG:3857 (Web Mercator meters) — not lng/lat degrees.

GET /geo/profiles/navvo3d

The static descriptor for the navvo3d profile: its id, the supported feature categories (queryNames), default format, and data source.

{
  "profile": "navvo3d",
  "queryNames": [
    "car", "road", "building", "building_part", "barrier", "fence",
    "tree", "scrub", "park", "green_area", "playground", "sports_pitch",
    "vineyard", "cemetery", "fountain", "street_lamp", "power_line",
    "power_pole", "power_tower", "wind_generator", "sculpture", "crane",
    "water", "aerial_line"
  ],
  "defaultFormat": "f4map-array",
  "source": "Navvo map data index for the Middle East"
}

The 24 queryNames are the valid values for the category filter on the detail endpoints.


GET /geo/details/{z}/{x}/{y}

Return the 3D-detail features whose bounding boxes intersect the given XYZ tile.

Path parameters

z
integer required
Tile zoom, 022.
x
integer required
Tile column.
y
integer required
Tile row (origin north).

Query parameters

queryNames
string
Comma-separated category filter, e.g. building,road,tree. Unknown names are dropped; if none are valid, all 24 categories are returned.
limit
integer
Max feature rows. Defaults to 4500, clamped to 115000.
balanced
boolean
When true, applies per-category quotas so dense categories (e.g. buildings) don't crowd out sparse ones.
curl -s "https://navvo.io/api/v1/geo/details/16/39102/26456?queryNames=building,road&limit=2000" \
  -H "x-api-key: nvvo_YOUR_KEY"

Response

A flat JSON array of feature objects (the f4map-array format):

[
  {
    "queryName": "building",
    "osm_id": "123456789",
    "name": "City Mall",
    "building": "retail",
    "building:levels": "3",
    "height": "14",
    "roof:shape": "flat",
    "z_order": 28,
    "way": "POLYGON((3970123.4567 3760456.1234,3970150.1 3760460.5,3970155.2 3760430.9,3970123.4567 3760456.1234))",
    "queryType": "polygon"
  },
  {
    "queryName": "road",
    "osm_id": "987654321",
    "highway": "secondary",
    "name": "Zahran Street",
    "lanes": "4",
    "z_order": 35,
    "way": "LINESTRING(3969800.10 3759900.20,3969950.30 3760010.55)",
    "queryType": "line"
  }
]
FieldTypeDescription
queryNamestringThe matched category.
osm_idstringNavvo map data element id.
(tags)scalarWhitelisted map data tags (name, name:ar, highway, building, height, building:levels, roof:shape, …) spread inline.
z_ordernumberRender order.
waystringWKT geometry in EPSG:3857 meters (X Y order).
queryTypestringpoint, line, or polygon.

An empty array [] means no features intersect the tile. Responses set Cache-Control: public, max-age=60.


POST /geo/details/{z}/{x}/{y}

Same as the GET, but categories are supplied in the JSON body — useful for long category lists or F4Map-style payloads. Same path params; limit and balanced are query params. Returns 201 with the identical array shape.

Request body

queryNames
array
Category names to include (filtered to the valid 24).
balanced
boolean
Enable per-category quotas (OR-combined with the balanced query param).
queries
array
F4Map-style fallback: if queryNames is absent, categories are taken from the keys of each queries[].union object.
{ "queryNames": ["building", "building_part", "road", "tree", "water"], "balanced": true }
way geometry is in Web Mercator meters (EPSG:3857). If your renderer expects lng/lat (EPSG:4326), reproject before use — or feed the meters directly into a 3D engine that works in Web Mercator world coordinates.
Copyright © 2026