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:
| Field | Meaning |
|---|---|
tileset_id | Full slug, e.g. anytime_21d529097c81af04_202501-202512_bg_tiles_v4 |
audkey | The 16-hex audience key (motionworks_segment_id) from the slug |
display_name | Segment name, joined from the segment definitions reference |
yyyymm_start / yyyymm_end | Date range the tileset covers (2025-01 through 2025-12 for the current family) |
format_tag | Naming-convention format tag |
grains | Geography grains the tileset encodes: ST, STCO, TRCT, BG |
day_types | Integer day types (1 Mon-Thu, 2 Fri, 3 Sat, 4 Sun) |
hours | Hours of coverage (24 = occupancy hours 0-23) |
tilejson_url_template | Present 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. |
licensed | Per-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_stale | Row count | Meaning |
|---|---|---|
false | fewer than 12 | Healthy path. Only these slugs have verified metadata today; build grants against what you see. |
false | exactly 12 | Healthy path, full catalog verified. |
true | exactly 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.
Updated 3 days ago