M Motionworks Population Intelligence

Discovering Displays tilesets

The tile discovery endpoint returns the customer-facing catalog of Displays tilesets you can build grants against.

Endpoint

GET /v2/displays/tiles/tilesets

  • Auth: none required (security: [] in the spec).
  • Cost: 0 credits.
  • Cache: Cache-Control: private, no-store.

Example request:

curl "https://api2.mworks.com/v2/displays/tiles/tilesets"

What a row tells you

Each entry in data.tilesets[] describes one layer you can name in a grant:

Field Meaning
slug Customer-facing layer slug: faces, viewsheds, paths_vehicle, paths_pedestrian, gates_vehicle, or gates_pedestrian. This is the value accepted in TileGrantCreateRequest.tilesets[] and the {layer} path segment of the tile-bytes URL.
title Human-readable display title, suitable for a "supported layers" UI.
minzoom / maxzoom Zoom range the tileset serves.
bounds Geographic bounds [west, south, east, north] in WGS84, for map setup.
layers[] TileJSON 3.0.0 vector_layers[] entries: one per MVT layer the tileset emits, with the layer id as it appears inside the tile bytes (often default for single-layer tilesets, NOT the URL slug), a description, zoom range, and a fields map of feature property to type (String, Number, or Boolean).

The meta block carries the standard request meta (request_id, credits_used: 0, product: "displays").

Example response

{
  "data": {
    "tilesets": [
      {
        "slug": "viewsheds",
        "title": "Modeled Viewsheds",
        "minzoom": 11,
        "maxzoom": 17,
        "bounds": [-125.0, 24.0, -66.0, 50.0],
        "layers": [
          {
            "id": "default",
            "description": "Modeled OOH viewshed polygons",
            "minzoom": 11,
            "maxzoom": 17,
            "fields": {
              "display_id": "String",
              "classification_type": "String"
            }
          }
        ]
      }
    ]
  },
  "meta": {
    "request_id": "req_e8281bd0f5a1",
    "credits_used": 0,
    "product": "displays"
  }
}

The field list above is illustrative. Read the actual layers[].fields map from the live catalog before styling; it is the contract MapLibre reads back out of the tile bytes.

Rule for consumers: read the catalog you get and build grants against the slugs it returns, rather than hard-coding the layer list client-side. The catalog is the admission surface: a slug that does not appear is not grantable.