Betting oddsEndpoint 107 of 116
Fixture odds
https://api.datasportsapi.com/
- Plan
- Pro + Business
- Auth
Bearer dsa_live_…- Parameters
- 1 required · 0 optional
- Returns
Odds
All markets the bookmaker offers on a fixture — result (1X2), double chance, draw no bet, winner, first to score, both teams to score, Asian handicap, handicap / point spread, goal / card / corner / points totals, the cricket toss winner, most sixes, a hundred / fifty in the match, and next goal (live).
Each comes with opening and current prices in decimal and fractional form, the direction of the latest price change, its suspension state and, once the match is over, the winning selections. Available on Pro and Business plans.
Plan access
Requires a Pro or Business plan; every other plan receives 403 endpoint_not_in_plan.
Worth knowing
- Every market has a key that stays the same for the whole fixture, built from the kind followed by :period, :line and :live ("result", "result:half1", "totalGoals:2.5", "asianHandicap:-1.25", "winner:live"); use it to merge WebSocket odds frames.
- During play the bookmaker shows the in-play market (live: true, key ending …:live) alongside the now-closed pre-match market, which keeps its final prices from before kick-off.
- line is the figure of a total or the handicap of the HOME side; when the line moves, the market gets a new key.
- decimal equals 1 + fractional, rounded to 2 decimal places.
- winning is null until settlement and wherever our data source gives no result — and some markets are never settled by the source.
- On NBA games, for instance, the point spread (handicap) and the first-quarter winner remained null hours after full time when we checked on 2026-11-05, while the total and the full-time and first-half winners were settled within seconds.
- Settlement is relayed from the source exactly as given and never computed by us, so on such markets winning remains null permanently.
- An empty markets list, with bookmaker / updatedAt null, means the bookmaker offers nothing on the fixture — typical for minor leagues and matches far in the future.
- Over REST the data refreshes roughly every 30 seconds in play; subscribe to odds:{id} to receive every price change.
01Parameters
idpathRequiredfixture id issued by DataSportsAPI, a positive integer
02Request
The same call from the command line and each SDK. The SDK lines assume a client created with your key; left out, it is read from DATASPORTSAPI_API_KEY. Installing a client: SDKs & CLI.
curl -H "Authorization: Bearer dsa_live_…" \
"https://api.datasportsapi.com/v2/fixtures/{id}/odds"03Response
The top-level keys of the JSON body. Each object links to its full shape in the data reference.
dataOddsmeta- count (number of markets)
{ "data": { "fixtureId": 701210, "bookmaker": { "id": 1, "name": "bet365" }, "updatedAt": "2026-11-04T17:20:00.000Z",
"markets": [
{ "key": "result", "kind": "result", "name": "Full time", "period": "match", "line": null, "live": false, "suspended": false,
"choices": [
{ "name": "1", "outcome": "home", "fractional": "19/20", "decimal": 1.95, "openingFractional": "11/10", "openingDecimal": 2.1, "change": "down", "winning": null },
{ "name": "X", "outcome": "draw", "fractional": "10/3", "decimal": 4.33, "openingFractional": "5/2", "openingDecimal": 3.5, "change": "up", "winning": null },
{ "name": "2", "outcome": "away", "fractional": "11/5", "decimal": 3.2, "openingFractional": "11/5", "openingDecimal": 3.2, "change": "none", "winning": null } ] },
{ "key": "totalGoals:2.5", "kind": "totalGoals", "name": "Match goals", "period": "match", "line": 2.5, "live": false, "suspended": false,
"choices": [ { "name": "Over", "outcome": "over", "fractional": "4/5", "decimal": 1.8, … }, { "name": "Under", "outcome": "under", … } ] },
{ "key": "asianHandicap:-0.5", "kind": "asianHandicap", "name": "Asian handicap", "period": "match", "line": -0.5, … }, … ] },
"meta": { "count": 19 } }04Errors
- 403
endpoint_not_in_planreturned to keys on the Free and Starter plans
- 403
history_not_in_planthe fixture predates the history your plan covers
- 404
not_foundDataSportsAPI never issued this id
unauthorized429rate_limited429quota_exceeded500internal_errorEvery error code