Skip to main content
WEBHOOK
Each delivery is one settled state of one game market, usually within a few minutes of Polymarket resolving it. A market can settle twice: first as a resolved oracle question without payouts, then with them. Each state is sent once, with its own settlement_id. Pro and Max only. Subscribe with settlement_filters on create or update to choose the markets: leagues (at most 32), sports_market_types (at most 64; * is every type), event_slugs (at most 100), and condition_ids (at most 100). Every field you set must match. Without sports_market_types, an endpoint receives moneyline (game winner) markets only, or every type of the markets condition_ids names. Most markets that settle are props, spreads, and totals: name their types, or send ["*"], to receive them. settlement is the same object GET /api/v1/games/{event_slug}/markets serves: payouts per share in micro-USDC in outcome order, result (outcome or split), winning_outcome_index, was_disputed, resolved_at, and observed_at, when we first saw this state. outcomes holds each outcome name at its index, so outcomes[winning_outcome_index] names the winner. A Polymarket polyv2 copy of a game carries copy_of_event_slug, the original game’s slug. It is sent only to a filter that names its condition ID or its own event slug, so a league subscription does not receive the same game twice. A state we first see more than 6 hours after it resolved is not sent. The OpenAPI spec carries an example delivery, epl_moneyline_settled, that you can sign and post to your own server to test it. The MarketSettled frame on Stream carries the same fields for every game market, without settlement_filters. The Webhooks guide covers signatures, retries, and replay.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

x-0xinsider-signature
string
required

v1= followed by the hex HMAC-SHA256 of {timestamp}.{raw body} under the endpoint signing secret. During a staged secret rotation, or while 0xinsider rotates the key every signing secret is derived from, it carries up to four comma-separated v1= candidates, the current secret's first: accept the delivery when any one verifies.

x-0xinsider-timestamp
string
required

Unix seconds when this attempt was signed. Reject a delivery whose timestamp is more than 300 seconds from your clock.

x-0xinsider-event-id
string
required

The event id, equal to the body id.

x-0xinsider-event-type
string
required

The event type the endpoint registered, equal to the body type.

idempotency-key
string
required

Stable key of this logical delivery (whdel_...). Every retry repeats it, so deduplicate on it.

x-0xinsider-delivery-id
string
required

Numeric id of this delivery, as a decimal string.

x-0xinsider-delivery-attempt
string
required

The delivery attempt counter, as a decimal string.

Body

application/json
id
string
required

Stable event id, identical across retries of the same logical event.

type
string
required
Allowed value: "market_settled"
created_at
string<date-time>
required

When the producer recorded the event; for a trade event, the fill time. Retries resend the same body, so it is not the time of the attempt.

data
object
required

market_settled data, also the MarketSettled frame on GET /api/v1/stream: a sports or esports game market settled, sent once per settled state the first time 0xinsider records it. A market can settle in two states, a resolved UMA question row without payouts and then the condition row with them; each is its own event with its own settlement_id.

Response

200

Return any 2xx status to acknowledge the delivery. Any other status, a redirect, a timeout or a connection error is retried on the published retry policy.