Discovering Anytime tilesets

List the Popcast Anytime tilesets your map client can render, and how to read the catalog's metadata_stale variants correctly.

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://api.mworks.com/v2/popcast/tiles/anytime/tilesets"

What a row tells you

Each row in data.tilesets carries the naming-convention fields parsed from the tileset slug plus the join to the segment definition:

FieldMeaning
tileset_idFull slug, e.g. anytime_21d529097c81af04_202501-202512_bg_tiles_v4
audkeyThe 16-hex audience key (motionworks_segment_id) from the slug
display_nameSegment name, joined from the segment definitions reference
yyyymm_start / yyyymm_endDate range the tileset covers (2025-01 through 2025-12 for the current family)
format_tagNaming-convention format tag
grainsGeography grains the tileset encodes: ST, STCO, TRCT, BG
day_typesInteger day types (1 Mon-Thu, 2 Fri, 3 Sat, 4 Sun)
hoursHours of coverage (24 = occupancy hours 0-23)
tilejson_url_templatePresent only on rows with a live upstream tile binding. Note: the bound endpoint never reads an aud query param; appending one silently serves All Persons tiles.
licensedPer-caller entitlement flag. Phase-2: hardcoded false; the ADR-029 entitlement read is the eventual flip. Rows may also carry bounds and layers for map setup.

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

The 12-row ceiling and metadata_stale

The catalog's static ceiling is twelve rows: the All Persons layer plus eleven audience segments. Twelve is a ceiling, not an invariant. The endpoint filters its static projection against a server-side manifest of verified tileset metadata, and the row count and data.metadata_stale flag tell you which path ran:

data.metadata_staleRow countMeaning
falsefewer than 12Healthy path. Only these slugs have verified metadata today; build grants against what you see.
falseexactly 12Healthy path, full catalog verified.
trueexactly 12 (the full static projection)Fail-stale floor. The metadata manifest was missing, malformed, or older than its freshness window (about 3 hours), so the endpoint served the static projection rather than nothing.

Rule for consumers: do not hard-code an expectation of twelve tilesets. Read the rows you get, and treat metadata_stale: true as a warning that freshly-published tilesets may not appear until the manifest refreshes.

Example response (healthy path, filtered)

{
  "data": {
    "tilesets": [
      {
        "tileset_id": "anytime_21d529097c81af04_202501-202512_bg_tiles_v4",
        "audkey": "21d529097c81af04",
        "display_name": "All Persons",
        "yyyymm_start": "202501",
        "yyyymm_end": "202512",
        "grains": ["ST", "STCO", "TRCT", "BG"],
        "day_types": [1, 2, 3, 4],
        "hours": 24,
        "licensed": false,
        "tilejson_url_template": "https://api.mworks.com/v2/popcast/tiles/anytime/grants/{grant_id}/tilejson"
      }
    ],
    "metadata_stale": false
  },
  "meta": {
    "request_id": "req_e8281bd0f5a1",
    "credits_used": 0,
    "product": "popcast"
  }
}

Example response (fail-stale floor):

{
  "data": {
    "tilesets": [
      {
        "tileset_id": "anytime_21d529097c81af04_202501-202512_bg_tiles_v4",
        "audkey": "21d529097c81af04",
        "display_name": "All Persons",
        "yyyymm_start": "202501",
        "yyyymm_end": "202512",
        "grains": ["ST", "STCO", "TRCT", "BG"],
        "day_types": [1, 2, 3, 4],
        "hours": 24,
        "licensed": false
      }
    ],
    "metadata_stale": true
  },
  "meta": {
    "request_id": "req_f0c1d2a3b455",
    "credits_used": 0,
    "product": "popcast"
  }
}

The floor serves the full 12-row static projection (abbreviated above) with metadata_stale: true; one or more rows may have no verified metadata entry behind them, and rows with no live upstream binding omit tilejson_url_template.

metadata_stale: false means the rows were filtered against the server-side manifest of verified tileset metadata (fresh within about 3 hours). metadata_stale: true means the fail-stale floor: the static projection was served because the manifest was missing, malformed, or stale.

Naming convention

Slugs follow anytime_<16hex-audkey>_<yyyymm_start>-<yyyymm_end>_bg_tiles_v4. The _bg_tiles_v4 family is the current block-group encoding; draft suffixed variants (_draft) are deliberately excluded from the catalog.

Discovery versus admission

Discovery (what exists upstream) is wider than admission (what the catalog admits for licensing). The catalog is a curated admissions surface: a new tileset appears in discovery-side tooling before it clears the admission gate into this catalog. If you expect a segment that is not listed, it has not been admitted yet; the metadata_stale flag tells you whether the catalog itself is in a degraded state.


Did this page help you?