Base URL https://tiles.reloquent.ai. Routes are unversioned — there is no /v1/
prefix here; that belongs to RLQ. Every response is CORS-permissive; browser access
control is the per-key origin allow-list, not the CORS header.
Quickstart
Point MapLibre — or any client that reads standard vector tiles — at a style URL. Nothing to host, nothing to build.
import maplibregl from "maplibre-gl"; new maplibregl.Map({ container: "map", style: "https://tiles.reloquent.ai/styles/outdoor/style.json?key=YOUR_RMT_KEY", }); // Same URL, this viewer's preferences: // ?theme=dark light | dark (default light) // ?units=metric imperial | metric (default imperial)
Styles
One stock family, outdoor, wiring every tileset together, served in four
variants from one URL. The family is the identity; theme and units are the viewer's
preference, so they travel in the query rather than the path.
| PARAMETER | VALUES | DEFAULT |
|---|---|---|
| theme | light · dark | light |
| units | imperial · metric | imperial |
Values are lowercase with no aliases: an unrecognized one is refused with
400 rather than quietly defaulting. Switching theme only
repaints — it fetches no new tiles. Switching units changes which
contour tileset is fetched, so it does cost tiles against your cap. Stock styles are
served with every overlay present; to ship a map with only some, use a Map.
Maps
A Map is a named, server-side style configuration bound to your account: a default
theme, a default units, and the set of overlays —
contours, terrain, public-lands,
mvum, gtlf, native-lands. Create and edit them in
the dashboard; serve one from
/maps/{id}/style.json?key=.... Theme and units can still be overridden
per request; overlays are fixed by the Map, and the tiles for excluded overlays are
never fetched, so they never touch your cap. Changing the configuration takes effect
without redeploying your client. Three Maps on the free tier, 25 on paid tiers.
Authentication and origins
Append ?key=rmt_live_... — necessary for a style URL, because the map client
fetches tiles, glyphs and sprites itself and cannot attach headers. Every route also
accepts Authorization: Bearer rmt_live_... if you are fetching server-side
and would rather keep the key out of a URL. The catalog at / is public.
A browser key is visible to anyone who opens the page, so restrict it: each key carries
an allow-list of up to 10 hostnames, exact (example.com) or
wildcard-suffixed (*.example.com, which matches app.example.com
but not the bare domain). An empty list allows any origin. A request with no
Origin or Referer at all — a server-to-server caller — is
allowed regardless of the list. Edit the list in the dashboard.
Routes
| ROUTE | WHAT IT DOES |
|---|---|
| GET / | The catalog — every tileset and style family available to you. Needs no key. |
| GET /styles/{family}/style.json | A stock MapLibre style. One family today: outdoor. Takes theme and units. |
| GET /maps/{id}/style.json | A Map you configured in the dashboard — your stored defaults, overridable with the same two parameters. |
| GET /{tileset}.json | TileJSON for one tileset, including its layers and declared extent. |
| GET /{tileset}/{z}/{x}/{y}.{ext} | A tile. pbf for vector tilesets, png for terrain-rgb. |
| GET /fonts/... · GET /sprites/... | Glyphs and sprites, referenced automatically by the styles. |
Tilesets
| TILESET | WHAT IT IS |
|---|---|
| v3 | Vector · zoom 0–14 · planet. OpenMapTiles schema with the fork's additions: ele_ft on peaks and aerodromes, surface, access, 4wd_only on roads. |
| contours-imperial · contours-metric | Vector · zoom 9–14. One layer, contour, with elevation in the tileset's unit and is_index on the emphasized line. 40 ft and 10 m intervals. |
| terrain-rgb | Raster · zoom 0–12. Mapbox Terrain-RGB encoding; use it as a raster-dem source for hillshade and 3D terrain. |
| public-lands · mvum · gtlf · native-lands | Vector overlays · zoom 4–14 (public-lands, native-lands) and 8–14 (mvum, gtlf). Upstream field names preserved verbatim. |
Terrain in your own style
The stock style already ships hillshade and 3D terrain. To use the DEM in a style of
your own, add terrain-rgb as a raster-dem source.
map.addSource("dem", { type: "raster-dem", tiles: ["https://tiles.reloquent.ai/terrain-rgb/{z}/{x}/{y}.png?key=YOUR_RMT_KEY"], tileSize: 512, maxzoom: 12, }); map.setTerrain({ source: "dem", exaggeration: 1.7 });
Metering and caching
The metered unit is one tile request: any request that reaches the tile route and is served counts once, including empty tiles and not-modified responses. Denials are never counted. Styles, TileJSON, fonts and sprites are never counted. Requests served from a client-side or CDN cache never reach us, so a repeat viewer costs far fewer requests than a first-time one. Usage is rolled up about every 15 minutes, so the dashboard meter and the moment a cap trips can lag traffic by that much.
Tiles from a stable archive carry Cache-Control: public, max-age=86400;
empty tiles in regions still filling in, and documents (index, TileJSON, styles, fonts,
sprites), carry one hour; a Map document carries 60 seconds. Tile responses carry a weak
ETag — send it back as If-None-Match for a 304.
HEAD is supported on every route.
Errors
| STATUS | WHEN |
|---|---|
| 401 missing_key | No key on the request. |
| 401 invalid_key | The key is unknown, expired or revoked. |
| 403 origin_forbidden | A browser request from an origin outside the key's allow-list, or with an origin header that cannot be parsed. |
| 429 over_cap | The key is over its monthly tile cap; Retry-After says when it resets. |
| 204 | Not an error: an empty tile — outside coverage, or a region still being built. It becomes a real tile when that region publishes. |
If our key store is ever unavailable, requests are served anonymously rather than denied: an outage on our side will never be why your map goes blank.
Coverage today
| LAYER | COVERAGE |
|---|---|
| Base map (v3) | Planet, zoom 0–14. |
| Contours | United States including Alaska and Hawaii, Mexico, and Canada except a band from roughly 51°N to 56°N between British Columbia and Quebec, which is not yet published. |
| Terrain-RGB | United States including Alaska and Hawaii, plus Canada and Mexico. |
| Overlays | United States, national. |
bounds in TileJSON is the declared extent, not a coverage map: outside real
coverage you get 204 (or a flat sea-level tile on the DEM tilesets), not a
404, and it becomes a real tile when that region publishes.