Skip to main content
WEBHOOK
Subscribe with price_move_filters on create or update: min_move_cents (2 to 50) and window_seconds (60, 120, 300 or 900) are required. Each subscription gets at most one delivery per market per window, unless the move grows further in the same direction. Pro and Max only. Add min_book_usd_within_2c to receive only moves with at least that many dollars resting within 2 cents of the price on each side. A move whose depth we could not measure carries book_depth_within_2c: null with a reason, and that filter skips it. phase says where the game stood when the price moved. It is pre_game before the scheduled start (the scheduled_at the games endpoints serve) and in_play once the game is live. It is unknown otherwise: the market has no scheduled start, the start passed before the game went live, or we could not read the game state. The OpenAPI spec carries an example delivery, nba_moneyline_before_tip, that you can sign and post to your own server to test it. The Discord line-move alerts recipe does that end to end. 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_price_moved"
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_price_moved data, also the MarketPriceMoved frame on GET /api/v1/stream: a sports or esports market's outcome-0 midpoint moved a whole-cent level over one window. Prices are decimal strings at full precision. A missing value is null with its *_unavailable_reason.

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.