GET /events - Fetch Games, Odds, and Results
Get a list of Events
GET https://api.sockodds.com/v2/events/
Retrieve sports events with odds, status, teams, players, results and bookmaker links. Filter by league, team, date or odds market. Includes every bookmaker line your plan allows.
eventID takes priority over all other filtersWhen you provide eventID or eventIDs, the API uses only those IDs to fetch results — all other query filters (sportID, leagueID, live, started, finalized, startsAfter, startsBefore, includeFinished) are ignored. Response-shaping parameters like oddID, bookmakerID, playerID, includeAltLines and includeOpposingOdds still apply.
Query parameters
| Parameter | Type | Description |
|---|---|---|
eventID | string | An eventID to get Event data for e.g. afl_2026-09-12_brisbane_lions_vs_adelaide_crows |
eventIDs | string | A comma separated list of eventIDs to get Event data for |
sportID | string | A sportID or comma-separated list of sportIDs to get Events for e.g. AUSSIE_RULES |
leagueID | string | A leagueID or comma-separated list of leagueIDs to get Events for e.g. AFL,NRL |
type | string | Only include Events of the specified type (match, tournament, prop) |
oddsAvailable | boolean | Whether you want only Events which do (true) or do not (false) have odds markets which are currently available (open for wagering) |
oddsPresent | boolean | Whether you want only Events which do (true) or do not (false) have any associated odds markets regardless of whether those odds markets are currently available |
oddID | string | An oddID or comma-separated list of oddIDs to include odds for. Replace the playerID slot with PLAYER_ID to match every player. `oddIDs` is accepted as an alias. e.g. points-home-game-ml-home |
includeOpposingOdds | boolean | Whether to include opposing odds for each included oddID (`includeOpposingOddIDs` is accepted as an alias) |
includeAltLines | boolean | Whether to include alternate lines in the odds byBookmaker data. Off by default — alt lines can multiply the payload. |
expandResults note | boolean | Whether to expand the results object to include all stat values rather than just the base set Accepted for compatibility. SockOdds always returns every result value the source carries, so this flag has no effect. |
includeOpenCloseOdds note | boolean | Whether to include open and close odds values (openOdds, closeOdds, openSpread, closeSpread, openOverUnder, closeOverUnder) in the odds byBookmaker data Accepted for compatibility. SockOdds does not snapshot opening and closing prices yet, so these fields are absent whatever you pass. |
bookmakerID | string | A bookmakerID or comma-separated list of bookmakerIDs to include odds for e.g. sportsbet,tab |
teamID | string | A teamID or comma-separated list of teamIDs to include Events for e.g. BRISBANE_LIONS_AFL |
playerID | string | A playerID or comma-separated list of playerIDs to include Events (and associated odds) for |
finalized | boolean | Only include finalized Events (true), exclude unfinalized Events (false) or all Events (omit) |
live | boolean | Only include live Events (true), only non-live Events (false) or all Events (omit) |
started | boolean | Only include Events which have previously started (true), only Events which have not previously started (false) or all Events (omit) |
ended | boolean | Only include Events which have ended (true), only Events which have not ended (false) or all Events (omit) |
cancelled | boolean | Only include cancelled Events (true), only non-cancelled Events (false) or all Events (omit) |
startsAfter | date-time | Get Events that start after this date e.g. 2026-09-01T00:00:00Z |
startsBefore | date-time | Get Events that start before this date |
includeFinished note | boolean | SockOdds extension. Without a date window, eventID or this flag, events that kicked off more than 24 hours ago are omitted. Pass true to list everything the store retains. SockOdds-only parameter; SportsGameOdds ignores it. |
limit | number | The maximum number of Events to return (default 10, max 100) |
cursor | string | The cursor for the request. Used to get the next group of results. This is an opaque token — pass the nextCursor value from the prior response unchanged. |
Response
Paginated: { "success": true, "data": Event[], "nextCursor": string | null, "notice": string? }
Event
Contains basic information, consensus odds, results (stats & scores), team info, lineups and bookmaker links for a given event/game
| Field | Type | Description |
|---|---|---|
eventID | string | Unique identifier for the event (e.g. afl_2026-09-12_brisbane_lions_vs_adelaide_crows) |
sportID | string | The sport (AUSSIE_RULES, RUGBY_LEAGUE, SOCCER, …) |
leagueID | string | The league (AFL, NRL, RUGBYLEAGUE_NRLW, EPL, …) — always the feed's own key, never constructed |
type | string | match, tournament or prop |
status | object | started, ended, live, cancelled, delayed, finalized, completed, startsAt, oddsPresent, oddsAvailable, currentPeriodID, periods{started,ended}, displayShort/displayLong |
info | object | displayName, commenceTime, lastUpdatedAt, stale (no source write for 45 min), bookmakersPresent, sourceBookmakerCount |
teams | object | home/away → { teamID, names{long,medium,short}, colors, statEntityID, score } |
players | object | playerID → { playerID, teamID, name, firstName, lastName } — the production SGO player ids |
results | object | Nested results in the format {periodID}.{statEntityID}.{statID} → number, where the source carries them |
odds | object | oddID → Odds object. Every market the event is priced on, all bookmakers nested under byBookmaker |
links | object | bookmakers{bookmakerID → event URL} and betslip{bookmakerID → bet-slip strategy} deeplinks, straight from each book's own event ids |
Status codes
| Status | Body |
|---|---|
200 | Success |
400 | {"success":false,"error":"Invalid params"} |
401 | {"success":false,"error":"Invalid API key"} |
403 | {"success":false,"error":"Inactive API key"} |
429 | {"success":false,"error":"Rate limit exceeded"} (Retry-After header) |
500 | {"success":false,"error":"Query failed"} |
Example response
Trimmed to one market; see the quickstart for a full event.
{
"success": true,
"nextCursor": "afl_2026-09-03_fremantle_vs_hawthorn",
"data": [
{
"eventID": "afl_2026-09-03_fremantle_vs_hawthorn",
"sportID": "AUSSIE_RULES",
"leagueID": "AFL",
"type": "match",
"status": {
"started": false,
"ended": false,
"live": false,
"cancelled": false,
"finalized": false,
"oddsPresent": true,
"oddsAvailable": true
},
"info": {
"stale": false
},
"odds": {
"points-all-game-eo-odd": {
"oddID": "points-all-game-eo-odd",
"opposingOddID": "points-all-game-eo-even",
"marketName": "Odd/Even Total Points",
"statID": "points",
"statEntityID": "all",
"periodID": "game",
"betTypeID": "eo",
"sideID": "odd",
"bookOdds": "-116",
"fairOdds": null,
"bookOverUnder": null,
"bookSpread": null,
"byBookmaker": {
"unibet": {
"bookmakerID": "unibet",
"odds": "-115",
"decimal": 1.87,
"available": true,
"lastUpdatedAt": "2026-09-03T10:22:09.000Z"
},
"tabtouch": {
"bookmakerID": "tabtouch",
"odds": "-118",
"decimal": 1.85,
"available": true,
"lastUpdatedAt": "2026-09-03T10:21:03.000Z"
}
}
}
}
}
]
}
Code samples
curl -X GET "https://api.sockodds.com/v2/events/?leagueID=AFL&oddsAvailable=true&limit=1" \
-H "x-api-key: YOUR_API_KEY"const r = await fetch("https://api.sockodds.com/v2/events/?leagueID=AFL&oddsAvailable=true&limit=1", { headers: { "x-api-key": "YOUR_API_KEY" } });
const { success, data, nextCursor, notice } = await r.json();import requests
r = requests.get("https://api.sockodds.com/v2/events/", params=dict(leagueID="AFL", oddsAvailable="true", limit="1"), headers={"x-api-key": "YOUR_API_KEY"})
body = r.json()req, _ := http.NewRequest("GET", "https://api.sockodds.com/v2/events/?leagueID=AFL&oddsAvailable=true&limit=1", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)HttpRequest req = HttpRequest.newBuilder().uri(URI.create("https://api.sockodds.com/v2/events/?leagueID=AFL&oddsAvailable=true&limit=1"))
.header("x-api-key", "YOUR_API_KEY").GET().build();
HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var body = await http.GetStringAsync("https://api.sockodds.com/v2/events/?leagueID=AFL&oddsAvailable=true&limit=1");Try it
// the response appears here