API Reference — Endpoints and Parameters

Base URL https://api.sockodds.com/v2. All responses use the envelope { success, data, nextCursor, notice }; every endpoint except /health needs a key. Each endpoint page has the full parameter table, response schema, code samples in six languages and a live request builder. Machine-readable: openapi.json · openapi.yaml · Postman.

EndpointSummaryQuery parameters
GET /events/Get a list of EventseventID, eventIDs, sportID, leagueID, type, oddsAvailable, oddsPresent, oddID, includeOpposingOdds, includeAltLines, expandResults, includeOpenCloseOdds, bookmakerID, teamID, playerID, finalized, live, started, ended, cancelled, startsAfter, startsBefore, includeFinished, limit, cursor
GET /odds/history/Get the tick-by-tick odds history of an EventeventID, oddID, bookmakerID, from, to, limit, cursor
GET /teams/Get a list of Teams by ID or leaguesportID, leagueID, teamID, limit, cursor
GET /players/Get a list of Players for a specific Team or EventteamID, eventID, playerID, leagueID, limit, cursor
GET /sports/Get a list of sports
GET /leagues/Get a list of LeaguessportID, leagueID
GET /stats/Get a list of StatIDsstatID, sportID, statLevel
GET /markets/Get a list of MarketsoddID, sportID, leagueID, bookmakerID, statID, statEntityID, periodID, betTypeID, sideID, isMainMarket, isProp, isSubPeriod, propType, isSupported, limit, cursor
GET /account/usageGet rate-limits and usage data about your API key
GET /stream/eventsSetup streamed (WebSocket) connectionfeed, leagueID, eventID

Authentication

x-api-key header (case-insensitive) or ?apiKey=. Missing or unknown → 401; deactivated → 403.

Health

GET /health → {"status":"ok","timestamp":"…","version":"…","uptimeSeconds":123,"pipeline":"healthy|stale|empty"}

Schemas

OddsHistoryTick

One recorded change to one bookmaker's price on one market (SockOdds extension). Odds are given as American strings (bookOdds) and decimals.

FieldTypeDescription
eventIDstringThe event
oddIDstringThe market side, in the oddID format (statID-statEntityID-periodID-betTypeID-sideID)
bookmakerIDstringThe bookmaker
changedAtstring (date-time)When the bookmaker's quote changed
kindstringopen = first quote seen · move = price, line or main-line status changed · limit = only the bet limit changed (Pinnacle) · close = the quote was withdrawn
bookOddsstring | nullThe new price as American odds; null on a close
decimalOddsnumber | nullThe new price as decimal odds
previousBookOddsstring | nullThe price this change replaced (American); null on an open
previousDecimalOddsnumber | nullThe price this change replaced (decimal)
linenumber | nullThe spread or total the price applies to; null for moneylines and yes/no markets
isMainLineboolean | nullWhether this line was the bookmaker's headline line at the time
layOddsnumber | nullExchange lay price, where the bookmaker is an exchange
maxStakenumber | nullThe bet limit after the change, where the bookmaker publishes one
previousMaxStakenumber | nullThe bet limit before the change

Event

Contains basic information, consensus odds, results (stats & scores), team info, lineups and bookmaker links for a given event/game

FieldTypeDescription
eventIDstringUnique identifier for the event (e.g. afl_2026-09-12_brisbane_lions_vs_adelaide_crows)
sportIDstringThe sport (AUSSIE_RULES, RUGBY_LEAGUE, SOCCER, …)
leagueIDstringThe league (AFL, NRL, RUGBYLEAGUE_NRLW, EPL, …) — always the feed's own key, never constructed
typestringmatch, tournament or prop
statusobjectstarted, ended, live, cancelled, delayed, finalized, completed, startsAt, oddsPresent, oddsAvailable, currentPeriodID, periods{started,ended}, displayShort/displayLong
infoobjectdisplayName, commenceTime, lastUpdatedAt, stale (no source write for 45 min), bookmakersPresent, sourceBookmakerCount
teamsobjecthome/away → { teamID, names{long,medium,short}, colors, statEntityID, score }
playersobjectplayerID → { playerID, teamID, name, firstName, lastName } — the production SGO player ids
resultsobjectNested results in the format {periodID}.{statEntityID}.{statID} → number, where the source carries them
oddsobjectoddID → Odds object. Every market the event is priced on, all bookmakers nested under byBookmaker
linksobjectbookmakers{bookmakerID → event URL} and betslip{bookmakerID → bet-slip strategy} deeplinks, straight from each book's own event ids

Odds

One side of one market on one event, with every bookmaker's price nested inside

FieldTypeDescription
oddIDstring{statID}-{statEntityID}-{periodID}-{betTypeID}-{sideID}
opposingOddIDstring | nullThe oddID of the other side (over ↔ under, home ↔ away); null for pick-N markets
marketNamestringHuman-readable market name, e.g. "Head to Head — Brisbane Lions"
statIDstringThe statistic being wagered on
statEntityIDstringhome, away, all, a playerID or a teamID
periodIDstringgame, 1h, 1q, 1i, 1ix5, 1s, …
betTypeIDstringml, sp, ou, ml3way, yn, eo, pick, …
sideIDstringhome, away, over, under, yes, no, draw, …
playerIDstringSet when the market is a player prop
bookOddsstringConsensus American price across the books pricing this side, e.g. "-108" (the vig left in)
bookOddsAvailablebooleanWhether at least one bookmaker has this side open for wagering
bookSpread / bookOverUnderstring | nullConsensus line for spread and total markets
fairOddsstring | nullThe de-vigged fair price derived from exchange and sharp-book consensus; null on plans without fair odds
fairOddsAvailablebooleanWhether enough exchange/sharp data existed to compute fairOdds
fairSpread / fairOverUnderstring | nullThe fair line for spread and total markets
started / ended / cancelledbooleanWhether the period this market settles on has started, ended or been cancelled
scoringSupportedbooleanWhether the source can grade this market from results
byBookmakerobjectbookmakerID → ByBookmakerOdds
altLinesobjectAlternate lines keyed by line, each with its own byBookmaker (only with includeAltLines=true)

ByBookmakerOdds

One bookmaker's price for one side of one market

FieldTypeDescription
bookmakerIDstringThe bookmaker (sportsbet, tab, pinnacle, betfairexchange, …)
oddsstringAmerican price, e.g. "-108" or "+240"
decimalnumberThe same price as decimal odds, e.g. 1.93 — Australian books quote decimal
overUnder / spreadstringThis book's line where the market has one
availablebooleanWhether the book has the side open right now (a suspended market is listed with available: false)
lastUpdatedAtdate-timeWhen this book's price was last observed
eventNamestringThe book's own name for the event
deeplinkstringDirect URL to the market on the book where one is known (also see Event.links)

Team

Contains information on a team

FieldTypeDescription
teamIDstringe.g. BRISBANE_LIONS_AFL — defined per league
sportIDstring
leagueIDstring
namesobject{ long, medium, short }
colorsobject{ primary, secondary, primaryContrast, secondaryContrast } where known
statEntityIDstringhome or away on the event the team was read from

Player

Contains information on a player

FieldTypeDescription
playerIDstringe.g. SONNY_GRAY_1_MLB — the production SportsGameOdds id format, unique across teams in a league
teamIDstring
sportIDstring
leagueIDstring
name / firstName / lastNamestring
position / jerseyNumberstring | numberWhere the source carries them

Sport

Contains information on a sport

FieldTypeDescription
sportIDstring
name / shortNamestring
enabledbooleanWhether your plan can read this sport
activeEventsnumberEvents currently carried

League

Contains information on a specific league

FieldTypeDescription
leagueIDstring
sportIDstring
name / shortNamestring
enabledbooleanWhether your plan can read this league
activeEventsnumberEvents currently carried

Stat

Contains information on a statistic (statID)

FieldTypeDescription
statIDstring
supportedLevelsobject{ all, team, player } — which statEntityID classes it is priced at
displaysobject{ short, long }
isScoreStatbooleanTrue for `points`, the stat that decides the event
supportedSportsobjectsportID → true

Market

Contains information about a betting market, including its classification and support data across leagues and bookmakers

FieldTypeDescription
oddIDstringThe unique identifier for this market
statID / statEntityID / periodID / betTypeID / sideIDstringThe decomposed grammar
playerID / teamIDstringSet for player props and tournament team markets
marketGroupID / marketGroupNamestringThe group (all sides of the market) this market belongs to, and its display name
isMainMarketbooleanTrue for the full-game moneyline, spread and total
isMainDerivativebooleanTrue for a sub-period of a main market
isSubPeriodbooleanTrue when the market tracks a non-main period
isPropbooleanTrue if this is a prop bet
propTypestringgame_prop, team_prop, player_prop or other_prop
isSupportedbooleanTrue if at least one bookmaker prices it in at least one league
activeEventsnumberUnique events with this market priced right now
supportobjectleagueID → { bookmakerID → true }
bookmakersstring[]SockOdds extension: the flat list of bookmakers pricing it

AccountUsage

Your API key's tier, rate limits and current usage

FieldTypeDescription
keyIDstringThe hashed identifier for the API key (the first 16 hex of sha256)
customerIDstring | nullBilling customer id where one exists
emailstring | null
isActiveboolean
tierstringlite, base or internal
rateLimitsobjectper-second / per-minute / per-hour / per-day / per-month → RateLimitInterval

RateLimitInterval

One rate-limit window

FieldTypeDescription
max-requestsinteger | nullMaximum allowed requests in the interval (null = unlimited)
current-requestsintegerRequests made so far in the interval
max-entitiesinteger | nullMaximum objects in the interval (null = unlimited)
current-entitiesinteger | nullObjects served so far in the interval
Need help?FAQ · Email · Contact