Live Events
GET /events/live returns all currently in-play events, optionally filtered by sport:
clock object with the current match clock. The same clock field also appears on live events returned by GET /events?status=live and GET /events/{id}.
The Clock Object
Live events carry an optionalclock field:
A few things to know:
clockis omitted entirely when no clock data is available for an event. Treat it as optional.minuteandplayedSecondsare extrapolated server-side from the live feed, so they stay accurate even when the response is served from cache.- The clock only advances while
runningistrue. During half-time and other breaks it freezes at the last played second. - For a per-second ticker in your UI, extrapolate client-side from
playedSecondsat the moment you received the response, whilerunningistrue. - On WebSocket, the
clockrides on livescore/statusmessages, but those fire only on real events. Seed the initial clock with oneGET /events/liveon connect, then let the WebSocket re-anchor it.
Cricket Scores
Cricket has no match clock, so live cricket events carry noclock object. The
per-innings detail lives in scores.periods instead, keyed inning1, inning2
and so on:
A few things to know:
wicketsandoversare cricket only. They are omitted for every other sport, so existing period scores keep exactly theirhome/awayshape.- Both are omitted when the source does not publish them, so treat them as optional even on cricket.
- A side that has not yet batted reads
0, not a missing key. - Coverage varies by competition. Major internationals and the larger franchise
leagues carry full innings detail; smaller domestic competitions may return a
match-level score with no
periodsat all.
statusDetail values
statusDetail is the live feed’s phase description passed through as-is. The exact
strings vary by sport; treat it as display text rather than an enum, and use
period + running for any betting logic. Values you can expect:
Rendering a football clock the conventional way
minute is cumulative elapsed play, so first-half stoppage time reads 46, 47,
48… To render the conventional 45+X / 90+X style, cap the minute at the
period boundary:
injuryTime carries the announced stoppage minutes when the fourth official
raises the board, so 45+2 with injuryTime: 4 tells you about two more
minutes of the half remain.
Participant Logos
GET /participants/{id}/logo returns the team or player crest as a PNG, served directly from the Odds-API domain:
homeId / awayId fields from event responses as the participant id, or look ids up via GET /participants.
- Responses include
Cache-Control: public, max-age=86400, so browsers and CDNs cache them for a day. You can hotlink the URL in an<img>tag. - Returns
404when no logo exists for the participant. Misses are cached server-side, so repeated lookups for logo-less participants stay fast. - Logos are served from our infrastructure; no third-party provider URLs are exposed to your users.
Next Steps
- Stream live scores and match status over WebSocket instead of polling, see the WebSocket guide
- Fetch odds for live events with Fetching Odds