Sports Betting Odds API for Apps
Games, prices and results for a betting app, from one REST API.
A betting app needs a list of games, prices from the bookmakers its users hold accounts with, and results once the games are over. SockOdds v1 gives you all three through one REST API, with one response shape, plain keys for leagues, teams and bookmakers, and ids that join prices to results.
Why SockOdds
- The bookmakers your users know. Sportsbet, TAB, Ladbrokes, Neds, PointsBet and many more, plus exchanges and prediction markets. The full list is on bookmakers.
- One shape for everything. Every response is
{data, meta, links}, errors areapplication/problem+json, and you page by followinglinks.nextunchanged. - Results in the same API.
GET /resultsgrades outcomeswon,lost,void,dead_heat,half_wonorhalf_lostfrom official sources. - Readable keys and shared ids. Leagues such as
nflandrlwc, teams such asaustralia_rugby_league, andev_,mk_andoc_ids that are the same across bookmakers, history and results. - Tooling ready. An OpenAPI file, a Postman collection and runnable samples in cURL, JavaScript and Python on every docs page.
- Free to start. A free Developer key covers a set of leagues and bookmakers. See pricing.
Call the API from your own server, not from the app itself: a key shipped in a mobile build or a browser bundle can be read by anyone.
What you can build
A games and odds screen
List a league's games with GET /events?league= and show their prices from GET /odds?league=, filtered with bookmakers= to the ones your users hold accounts with.
Bet tracking in the app
Save the outcome id with each bet and settle it from /results. See bet tracking and settlement.
Price comparison
Show which bookmaker has the best price for each outcome. See odds comparison.
Try it
This request lists NFL games in the default window.
curl -sS "https://api.sockodds.com/v1/events?league=nfl" \
-H "Authorization: Bearer $SOCKODDS_API_KEY"const response = await fetch("https://api.sockodds.com/v1/events?league=nfl", {
headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
console.log(JSON.stringify(await response.json(), null, 2));import json, os, urllib.request
request = urllib.request.Request(
"https://api.sockodds.com/v1/events?league=nfl",
headers={"Authorization": "Bearer " + os.environ["SOCKODDS_API_KEY"]},
)
with urllib.request.urlopen(request) as response:
print(json.dumps(json.load(response), indent=2))Response from a local copy of the API with invented test prices
{
"data": [
{
"id": "ev_000ckk0rv081",
"name": "Arizona Cardinals v Atlanta Falcons",
"league": {
"key": "nfl",
"name": "NFL"
},
"scheduled_start": "2026-10-16T20:00:00.000Z",
"status": "scheduled",
"participants": [
{
"role": "away",
"identity": {
"key": "atlanta_falcons",
"name": "Atlanta Falcons"
}
},
{
"role": "home",
"identity": {
"key": "arizona_cardinals",
"name": "Arizona Cardinals"
}
}
]
}
],
"meta": {
"count": 1,
"cursor": null
},
"links": {
"next": null
}
}There are two games: one final and one scheduled. With no dates, the list starts 48 hours ago, so recent games and upcoming ones come back together. Use starts_after and starts_before to ask for any other window. Each game's id is what you pass to the odds and results routes.