Skip to main content
GET
List events

Query Parameters

category
string

Filter by category

status
string

Filter by status. resolved covers determined and settled

tag
string

Filter to one tag slug

series
string

Filter to one series slug. Expands it rather than collapsing

subcategory
string

Filter to one sub-category slug, e.g. tennis

frequency
string

Filter by series cadence, e.g. daily / weekly / monthly

sort
string

Sort order, e.g. newest

reverse
boolean

Reverse the sort

market_sort
string

Order of markets[] within each event

limit
integer

Page size, applied after collapsing

fields
string

slim reduces each event and market to the card fields (see api.SlimEvent); anything else returns the full object

Response

200 - application/json

OK

category
string
Example:

"crypto"

created_at
string

CreatedAt (RFC3339, from events.created_at) backs the "newest" list sort. Before it was surfaced, "newest" fell back to id DESC.

Example:

"2026-08-07T10:00:00Z"

description
string
Example:

"Resolves from the final Coinbase BTC-USD trade price before the close date."

display_type
string

DisplayType (events.display_type) picks the chart SOURCE, not the market shape: "probability" (default) plots the markets' own YES probability, "price_feed" plots an underlying feed with a reference line.

Example:

"probability"

effective_taker_fee_rate_bps
integer

EffectiveTakerFeeRateBps is the resolved fee rate the matching engine will charge for trades in any of this event's markets. Computed at load time as: COALESCE(override, category default). NULL/nil means UNRESOLVED — no override and no fee_categories row for the category — which order placement rejects (distinct from a resolved 0 = free). Read-only — not persisted as its own column.

Example:

200

Example:

false

id
integer
Example:

12345

image_url
string
Example:

"https://cdn.calibri.io/events/btc-70k.png"

markets
object[]
outcome_structure
string

OutcomeStructure (events.outcome_structure) says how this event's markets relate to one another. It selects the frontend layout and is deliberately NOT derivable from len(Markets) — a contender race, a strike ladder and a fixture's derivative bundle can all carry a dozen markets and none of them renders like the others.

independent — one question, or several unrelated ones (the default) one_winner — at most one market resolves YES; ranked, sums to ~100% ladder — nested thresholds over one variable ("above $100k", "above $110k"). Several legs resolve YES together so it is not one_winner, but the legs are nested so it is not independent either: prices fall monotonically down the ladder, ordered by markets.event_rank.

Kalshi carries the same three as MECNET / DIRECNET / none.

Display + validation only. Neither Kalshi's collateral netting nor Polymarket's NegRiskAdapter is implemented on our side.

Example:

"independent"

price_feed
integer[]

PriceFeed (events.price_feed) carries {source, symbol, reference_price} for the price_feed layout. Passed through opaquely — pythia never interprets it. nil when unset.

series
object

Series is the FEED this event came from — Polymarket's atp / mls-2025, Kalshi's series_ticker. Usually absent: a one-off competition has no feed behind it, and Polymarket returns series: [] on every Wimbledon event including the matches. Omitted from JSON when unset.

slug
string
Example:

"btc-above-70k-december-2026"

status
string
Example:

"active"

subcategory
object

Subcategory is the browse SUBJECT — the leaf of the two-level category tree, carrying its parent for a breadcrumb. Exactly one per event and often absent, because an event may sit directly under its top-level category.

Not a replacement for Category above: that stays the fee key. This is what the browse chips and the /categories drilldown are built from.

tags
object[]

Tags are the editorial SHELVES this event sits on — what puts it on a hub page. Many-to-many and deliberately not taxonomic: "Wimbledon" collects the men's winner race, the women's winner race and every match, which share no series and no outcome structure. Always present (possibly empty) so the frontend need not nil-check.

taker_fee_rate_bps_override
integer

TakerFeeRateBpsOverride mirrors events.taker_fee_rate_bps_override (NULL = inherit from category default, or global default if no category row). Persisted to the DB; included in JSON for admin consumers.

Example:

200

title
string
Example:

"Will BTC close above $70,000 on 31 Dec 2026?"