Skip to content

Odds stream

GET /odds/stream[?league=<league>]

The prices of /odds pushed as they change, on odds.halfpoint.tech. Needs the Realtime or Risk plan; otherwise 403. Your plan decides the fields, as in /odds.

parameter
league optional one league, default all

It is plain Server-Sent Events over HTTP: one JSON object per event, with the key sent as usual. Errors (401, 402, 403, 429) are normal status codes before the stream starts.

A key may have 8 streams open at once, counted with the live stream together (2 while its only plans are trials); another one answers 429, too many open streams for this key (8); close one or contact us. Closing a stream frees its slot. See Plans.

curl -N -H "X-Api-Key: $KEY" "https://odds.halfpoint.tech/odds/stream?league=nba"
event: price
id: 48213
data: {"id":"nba-261030-mia-cha","league":"nba","start":"2026-10-30T23:40:00.000Z","markets":{"moneyline":{"home":0.46,"away":0.54,"recent":true,"at":"2026-10-30T23:36:42.915Z"}}}

event: remove
id: 48214
data: {"id":"nba-261030-mia-cha","market":"moneyline"}

: ping

First comes the current state, one price event per fixture; then every change.

event data
price a fixture as in /odds, with all its markets: it replaces what you hold
remove id, market: the market is gone (see Recent)

Lines starting with : are comments that keep the connection open, about every 30 s. SSE clients ignore them.

Reconnecting

Reconnect whenever the connection drops, and start over from what the stream sends first: there is no replay of missed events, so anything you hold that isn't in the new state is gone. Last-Event-ID isn't supported. A client more than 1,024 events behind is disconnected the same way.

The stream's subscription is its league: to change it, reconnect.