groupItemTitle.
Every public market response includes the parent event slug; every
event response carries its full markets array. Most clients query
GET /api/events for the home grid and fall back to
GET /api/markets/{symbol} for the trading detail page.
Event shape
Football metadata fields
Crypto events
An event in thecrypto vertical carries a cryptoSeries block when
its markets belong to a recurring Up/Down
series; every other event carries
null. The factory creates one event per series per UTC day, so an
Up/Down event is a day of windows (~96 at the 15-minute cadence) —
navigate it through GET /api/crypto-series/{id}/windows rather than
through markets[], which only nests the currently tradeable ones.
cryptoSeries: null — their markets carry the rule in
crypto.
Per-market fields driven by the event grouping
Filtering
Filters AND across fields and OR within a field. The
multi-value fields (
stage, group, team, tag, vertical,
competition, scope, asset, cadence) accept repeated keys
(?tag=a&tag=b) or CSV (?tag=a,b) — both forms can be mixed, up to
20 distinct values per field, duplicates collapsed.
Events with no public-status (OPEN / PRE_MARKET / PAUSED / PROPOSED)
market are excluded from the response entirely — the public surface
never returns “empty” events.
Tags
The tag taxonomy is admin-curated rather than free-form. UseGET /api/tags for the full active list and the slug as the value
for ?tag=.
isFeatured tags are surfaced in the primary navigation strip;
non-featured tags remain selectable through filter UI but are not
pinned.