M Motionworks Population Intelligence

Discovering Anytime tilesets

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

Endpoint

GET /v2/popcast/tiles/anytime/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/popcast/tiles/anytime/tilesets"

What a row tells you

Each row in data.tilesets describes one published tileset: the slug you pass when minting a grant, the segment it renders, the coverage window, and the map-setup metadata (zoom range, bounds, layer schema).

Field Meaning
slug Full tileset slug, e.g. tiles_anytime_v2_3_21d529097c81af04_202501_202512_bg_v1. This is the value you pass in a grant's tilesets[] and the {layer} segment of the tile URL. Take slugs from the catalog rather than constructing them.
title / display_name Segment name, suitable for a picker
audkey The 16-hex audience key (motionworks_segment_id) from the slug; joins to the segment definitions reference
yyyymm_start / yyyymm_end Coverage window the tileset covers (YYYYMM; 2025-01 through 2025-12 for the current family)
minzoom / maxzoom Zoom range the tileset serves (0-13 today)
bounds TileJSON bounds [west, south, east, north], WGS84
layers The MVT layers inside the tiles with their field schemas. Every Anytime tileset publishes a single source layer named default carrying geography_id, geography_type, the 24 hourly occupancy fields occ_h00occ_h23, area fields, and is_water.
grant_create_url The endpoint to POST to for a grant that covers this tileset (POST /v2/popcast/tiles/anytime/grants). Minting a grant and reading its TileJSON is the only path from the catalog to tiles.
licensed Whether your organization is licensed for this tileset. This public endpoint has no caller context, so the flag is currently always false; licensing is checked when you mint a grant.

Each tileset encodes four zoom-banded geography grains: state, county, census tract, and block group for the block-group (bg) family, with ZIP Code Tabulation Areas replacing tract and block group in the ZIP Code (zcta) family. Each hourly field carries four day-type slots (1 Mon-Thu, 2 Fri, 3 Sat, 4 Sun).

data.metadata_stale is always present (see below); the meta block carries the standard request meta (request_id, credits_used: 0, product: "popcast").

Catalog size and metadata_stale

The catalog lists every Popcast Anytime tileset currently published. Today that is one tileset per audience segment per geography family: 186 segments (All Persons plus the syndicated audience segments) in both the block-group and ZIP Code families, for 372 rows. The count grows as segments are published, so do not hard-code an expectation of any particular number of rows.

The data.metadata_stale flag tells you whether the catalog is current:

data.metadata_stale Row count Meaning
false every published tileset Healthy path. Build grants against what you see.
true 0 The catalog could not be refreshed. The list is empty rather than out of date; retry a few minutes later.

Rule for consumers: read the rows you get, and treat metadata_stale: true as a transient condition (retry) rather than as an empty product.

Example response (abbreviated)

{
  "data": {
    "tilesets": [
      {
        "slug": "tiles_anytime_v2_3_21d529097c81af04_202501_202512_bg_v1",
        "title": "All Persons",
        "minzoom": 0,
        "maxzoom": 13,
        "bounds": [-124.848974, 24.396308, -66.885444, 49.384479],
        "layers": [
          {
            "id": "default",
            "minzoom": 0,
            "maxzoom": 13,
            "fields": {
              "geography_id": "String",
              "geography_type": "String",
              "occ_h00": "String",
              "occ_h23": "String",
              "area_sqkm": "Number",
              "land_sqkm": "Number",
              "total_sqkm": "Number",
              "is_water": "Boolean"
            }
          }
        ],
        "audkey": "21d529097c81af04",
        "display_name": "All Persons",
        "yyyymm_start": "202501",
        "yyyymm_end": "202512",
        "grant_create_url": "https://api2.mworks.com/v2/popcast/tiles/anytime/grants",
        "licensed": false
      }
    ],
    "metadata_stale": false
  },
  "meta": {
    "request_id": "req_e8281bd0f5a1",
    "credits_used": 0,
    "product": "popcast"
  }
}

Example response while the catalog is being refreshed:

{
  "data": {
    "tilesets": [],
    "metadata_stale": true
  },
  "meta": {
    "request_id": "req_f0c1d2a3b455",
    "credits_used": 0,
    "product": "popcast"
  }
}

Naming convention

Slugs follow tiles_anytime_<format>_<16hex-audkey>_<yyyymm_start>_<yyyymm_end>_<family>_v1, where <format> is the tile field-layout version (currently v2_3) and <family> is bg (Census block groups) or zcta (ZIP Code Tabulation Areas). Draft and unpublished variants never appear in the catalog.

Discovery versus admission

The catalog is the admission surface: a tileset appears here once it has been published and its renderer metadata has been verified. If you expect a segment that is not listed, it has not been published yet; the metadata_stale flag tells you whether the catalog itself is temporarily unavailable.