Prediction markets API
One prediction-market event's identity, lifecycle and windowed stats
One event: what is being bet on, whether it is open or settled, and its windowed activity. The markets that price it are a separate read.
/api/external/prediction/prediction-event/{id}What it returns
One event's full detail, addressed by the id from GET /prediction/prediction-events. This is a DIFFERENT universe from the rest of this API: the id here is never a token mint or contract address. A well-formed but unrecognised id returns every field null rather than a 404.
Chains
This endpoint is not tied to a chain: it takes no chain in its request.
Request
Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.
curl -H "x-dex-data-key: $DEXDATA_API_KEY" \ "https://api.dexdata.io/api/external/prediction/prediction-event/<id>"
| Parameter | Description |
|---|---|
idpath · string · required | A prediction-market event id (groups one or more markets, e.g. a multi-candidate election) — not a token mint or contract address, and not scoped to any chain this API otherwise supports. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
id | string | null | |
question | string | null | |
protocol | string | null | The venue this event trades on, e.g. "POLYMARKET" or "KALSHI". |
status | string | null | One of OPEN, SUSPENDED, RESOLVED, CANCELLED, PENDING. |
url | string | null | The venue's own page for this event. |
tags | string[] | null | |
opensAt | number | null | Unix seconds the event opened for trading. |
closesAt | number | null | Unix seconds trading closes. |
resolvesAt | number | null | Expected resolution time, Unix seconds. |
resolvedAt | number | null | Actual resolution time, Unix seconds — null while unresolved. |
resolution | object | null | Null while unresolved, or when the venue does not publish one even after resolution — measured on a multi-market event whose per-market outcome, not a single event-level result, decides it. |
resolution.result | string | null | |
resolution.source | string | null | |
categories | object[] | null | |
categories[].name | string | null | |
categories[].slug | string | null | |
categories[].subcategories | unknown[] | null | |
markets | object[] | Every market that makes up this event. Empty for an unrecognised event id. |
markets[].id | string | null | |
markets[].label | string | null | |
markets[].question | string | null | |
lifecycle | object | |
lifecycle.ageSeconds | number | null | |
lifecycle.expectedLifespanSeconds | number | null | |
lifecycle.timeToResolutionSeconds | number | null | |
lifecycle.isResolved | boolean | null | |
lifecycle.winningOutcomeId | string | null | Null even for a resolved multi-market event — measured live: a moneyline event's "winner" is per-MARKET, not a single event-level outcome. |
allTimeVolumeUsd | number | null | Lifetime trading volume across this event's markets, USD. |
statsHour1 | object | |
statsHour1.volumeUsd | number | null | Trading volume across this event's markets over the window, USD. |
statsHour1.trades | number | null | Number of trades over the window. |
statsHour1.uniqueTraders | number | null | Distinct trading accounts over the window — null on venues that do not report it (measured: Kalshi). |
statsDay1 | object | |
statsDay1.volumeUsd | number | null | Trading volume across this event's markets over the window, USD. |
statsDay1.trades | number | null | Number of trades over the window. |
statsDay1.uniqueTraders | number | null | Distinct trading accounts over the window — null on venues that do not report it (measured: Kalshi). |
Start building with DexData today
Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.
Get a free API key