Navvo
API Reference

Map Tiles & Styles

Navvo Maps styles, vector & raster tiles, glyphs, and sprites — a complete first-party basemap.

Map Tiles & Styles

A complete, first-party basemap served by Navvo Maps. Point the Navvo Maps renderer at a style URL and everything else — vector tiles, glyphs, sprites, raster layers — is served by Navvo. Nothing is fetched from outside Navvo.

Scope required: tiles

Map requests can't send headers. Browsers fetch style/tile/glyph/sprite URLs directly and can't attach an x-api-key header. Pass the key as a query parameter on the style URL: ?api_key=nvvo_YOUR_KEY.
No API key? The map is watermarked. Without an API key, the basemap renders with a "Navvo Map Developer (Provide Your API Key)" watermark tiled across every tile on a dark, semi-transparent background. Provide your api_key (query param on the style URL, or the SDK apiKey) to get a clean, unwatermarked map.

GET /tiles/styles

The catalog of available map styles — for building a style switcher. Each entry's style value is what you pass to GET /tiles/style?style=; category is base or imagery.

curl -s "https://navvo.io/api/v1/tiles/styles" -H "x-api-key: $NAVVO_API_KEY"
{
  "provider": "navvo-tiles", "count": 6, "styleUrl": "/tiles/style?style={style}",
  "styles": [
    { "style": "standard", "label": "Standard", "category": "base", "description": "The default road map." },
    { "style": "positron", "label": "Light", "category": "base", "description": "Minimal light basemap." },
    { "style": "dark", "label": "Dark", "category": "base", "description": "Night/dark basemap." },
    { "style": "satellite", "label": "Satellite", "category": "imagery", "description": "Aerial/satellite imagery." },
    { "style": "3d", "label": "3D Buildings", "category": "base", "description": "3D building extrusions (supports ?terrain=1)." },
    { "style": "terrain", "label": "Terrain", "category": "imagery", "description": "Shaded-relief terrain." }
  ]
}

GET /tiles/style

Returns a complete Navvo Maps style document (standard vector style spec, v8) for a named style. This is the URL you give the Navvo Maps renderer.

Query parameters

style
string
One of standard (default), road (alias of standard), positron, dark, satellite, terrain, 3d. The full list with labels is at GET /tiles/styles. Unknown values return 400.
version
string
Cosmetic label only — becomes the style name.
terrain
string
1/true to include the elevation terrain source in the 3d style (when available).
const map = new NavvoMaps.Map({
  container: "map",
  style: "https://navvo.io/api/v1/tiles/style?style=standard&api_key=nvvo_YOUR_KEY",
  center: [35.91, 31.95],
  zoom: 12,
});

The returned style references Navvo-hosted child resources (glyphs, sprites, and a vector tile catalog) — all served by Navvo. You don't request these directly; the renderer loads them automatically from the style:

{
  "version": 8,
  "name": "Navvo standard",
  "sources": {
    "navvo": { "type": "vector", "url": "https://navvo.io/api/v1/tiles/tilejson/navvo", "attribution": "© Navvo" }
  },
  "layers": [
    { "id": "background", "type": "background", "paint": { "background-color": "#FAFBFC" } },
    { "id": "water", "type": "fill", "source": "navvo", "source-layer": "water", "paint": { "fill-color": "#D8E7FF" } }
  ],
  "metadata": { "navvoStyle": "standard", "navvoAttribution": "© Navvo" }
}

The satellite and terrain styles are raster styles whose single source points at the raster tile endpoint.

The standard/dark/positron/3d styles are vector; satellite/terrain are raster. Use /tiles/style as your single entry point — Navvo Maps resolves the rest.
Buildings. On the non-3d vector styles (standard/dark/positron), buildings render as flat 2D footprints via the buildingfill layer, which is visible by default but only appears when zoomed in (minzoom ≈ 15.5). Nothing is raised — the footprints stay flat even when the camera is pitched (e.g. during navigation).To raise buildings into 3D on those styles, add your own fill-extrusion over the same source layer:
map.addLayer({
  id: 'buildings-3d', type: 'fill-extrusion',
  source: 'navvo', 'source-layer': 'building', minzoom: 15.5,
  paint: {
    'fill-extrusion-color': '#cfd5e0',
    'fill-extrusion-height': ['coalesce', ['get', 'render_height'], ['get', 'height'], 6],
    'fill-extrusion-base': ['coalesce', ['get', 'render_min_height'], ['get', 'min_height'], 0],
  },
});
// (extrusions only read as 3D when the camera is pitched — set map.setPitch(...))
The dedicated 3d style ships this raised layer (navvo-3d-buildings) already, along with a pitched camera — use it when you want 3D buildings out of the box.
Caching./tiles/style responses are sent with Cache-Control: public, max-age=300, stale-while-revalidate=86400. The style document is safe to reuse for 5 minutes (and served stale-while-revalidate for up to a day), so a renderer, service worker, or CDN can cache it across reloads instead of refetching on every map open. Style edits propagate within ~5 minutes.
Compression. Vector tiles, glyphs, sprite JSON, and the Mapillary coverage/sign/point tiles are gzip-compressed (Content-Encoding: gzip) when your request sends Accept-Encoding: gzip — which every browser and standard HTTP client (and the Navvo renderer) does automatically, transparently decompressing on receipt. This roughly halves the transfer for coverage tiles and cuts vector tiles ~35%. Raster/imagery tiles (PNG/JPEG) are already compressed and are served as-is. Responses carry Vary: Accept-Encoding, so a shared cache stores the right variant.

Attribution

Navvo serves the entire basemap itself — there are no runtime calls to any third-party provider. Navvo basemap responses carry © Navvo. Display the Navvo credit; no third-party attribution is required in your app.

  • Base map & satellite/imagery: © Navvo. Keep the renderer's compact attribution control visible — the Navvo SDKs show it by default.
  • GET /map/config returns an attribution object so you can render the Navvo credit in a custom UI if you build your own attribution surface.

Tile sources

These endpoints back the styles above. The renderer requests them for you when it loads a style — you normally don't call them by hand. They're listed for completeness and for advanced/custom renderers.

EndpointReturns
GET /tiles/vector/navvo/planet/{z}/{x}/{y}.pbfOne vector tile (protobuf), application/x-protobuf. The path segment after navvo is typically planet; a .pbf extension on {y} is accepted. Cached public, max-age=86400.
GET /tiles/tilejson/navvoThe vector tile catalog (TileJSON) the vector styles reference as their source url — tile template, zoom range, and vector layers.
GET /tiles/raster/{source}/{z}/{x}/{y}.pngOne raster tile (PNG/JPEG). sourcestandard, dark, satellite, terrain, navvo-natural-earth.
GET /tiles/glyphs/navvo/{fontstack}/{range}.pbfFont glyph ranges (.pbf) referenced by the style's glyphs.
GET /tiles/sprites/navvo/spriteThe sprite atlas base URL; the renderer appends .json (index), .png, and @2x.png (images).
{source} raster values: standard/dark are a clean neutral base, satellite is Navvo satellite imagery, terrain is shaded elevation, and navvo-natural-earth is a low-zoom world base. All child resources are served entirely by Navvo — the style contains no third-party provider names and makes no runtime calls outside Navvo.

You can also wire a raster source directly:

map.addSource("nav-sat", {
  type: "raster",
  tiles: ["https://navvo.io/api/v1/tiles/raster/satellite/{z}/{x}/{y}.png"],
  tileSize: 256,
  attribution: "© Navvo",
});

GET /tiles/layers

A small discovery catalog of available logical layers, style URLs, and raster tile templates.

{
  "layers": ["administrative", "water", "buildings", "roads", "poi", "places"],
  "styles": {
    "standard": "/api/v1/tiles/style?style=standard",
    "dark": "/api/v1/tiles/style?style=dark",
    "satellite": "/api/v1/tiles/style?style=satellite",
    "terrain": "/api/v1/tiles/style?style=terrain"
  },
  "tileProxy": {
    "standardRaster": "/api/v1/tiles/raster/standard/{z}/{x}/{y}.png",
    "satelliteRaster": "/api/v1/tiles/raster/satellite/{z}/{x}/{y}.png"
  }
}
For map overlays (traffic, incidents, weather, transit, logistics zones) and the full map configuration manifest, see Map Data & Risk.

Satellite Time-Machine (dated imagery)

Dated, multi-layer satellite imagery, proxied and brand-scrubbed. Request any registered layer at any date.

GET /tiles/gibs/{layer}/{z}/{x}/{y}?date=YYYY-MM-DD

Layers: truecolor, truecolor-aqua, truecolor-viirs, snow, aerosol (dust/air-quality). See GET /tiles/layerstimeMachine for the live registry + default date. Omit date for the most recent available.


Terrain elevation (DEM)

Navvo-hosted elevation tiles (raster-dem) — the source behind 3D terrain (/tiles/style?style=3d&terrain=1) and hillshading. Coverage is Jordan; tiles outside the coverage bounds return 404 (treat that as "flat", not an error).

GET /terrain/tilejson

The DEM tileset descriptor (TileJSON): tile template, zoom range, bounds, and the elevation encoding.

curl -s "https://navvo.io/api/v1/terrain/tilejson" -H "x-api-key: $NAVVO_API_KEY"
{
  "tilejson": "2.2.0", "name": "Navvo Jordan terrain", "scheme": "xyz",
  "type": "raster-dem", "format": "png", "encoding": "",
  "minzoom": 0, "maxzoom": 14, "bounds": [34.88, 29.12, 39.32, 33.38],
  "tiles": ["/api/v1/terrain/tiles/{z}/{x}/{y}.png"],
  "metadata": { "license": "ODbL", "generatedAt": "", "tileCount": 61968 }
}

GET /terrain/tiles/{z}/{x}/{y}.png

One elevation tile (PNG, RGB-encoded elevation). Cached public, max-age=604800, immutable. Out-of-bounds or unbuilt tiles → 404.

You normally never wire the DEM by hand: requesting GET /tiles/style?style=3d&terrain=1 returns a style whose navvo-terrain-dem source already carries the exact decode parameters — the custom-encoding factors (redFactor, greenFactor, blueFactor, baseShift, i.e. elevation = baseShift + R·redFactor + G·greenFactor + B·blueFactor) — plus a tuned terrain.exaggeration. Use the style and the renderer decodes elevation automatically.

Static map images

GET /tiles/static renders a non-interactive map image — for emails, receipts, chat previews, and social-share cards. No renderer needed; put the URL straight into an <img> (or an og:image with format=png).

Query parameters

center
string required
lat,lng — the map center (note: latitude first).
zoom
number
Zoom 1–19. Defaults to 13.
size
string
WxH in pixels, each side 64–1280. Defaults to 600x400.
markers
string
Semicolon-separated pins: lat,lng;lat,lng;…. Each renders as a Navvo pin.
style
string
standard (default), dark, satellite, or terrain.
format
string
Omit for SVG (default — crisp at any scale). png returns a true raster PNG — use it for og:image / social-share previews, since crawlers don't render SVG.
curl -s "https://navvo.io/api/v1/tiles/static?center=31.9539,35.9106&zoom=14&size=600x400&markers=31.9539,35.9106&style=standard&format=png" \
  -H "x-api-key: $NAVVO_API_KEY" -o preview.png

Responses are cached (Cache-Control: public, max-age=3600) and carry the © Navvo attribution strip baked into the image. Scope: tiles.

Copyright © 2026