Results
A verdict for every outcome official evidence can settle, and nothing guessed.
What a result is
GET /v1/results returns graded outcomes for finished events. Each outcome carries the same outcome id as its prices, so you can settle a bet by looking up the id you priced.
Results are graded from official result sources only, never from a bookmaker's settlement. An outcome that official evidence cannot settle is left out, never guessed. A market settles only once every one of its outcomes can be graded.
Ask for results
| Parameter | Meaning |
|---|---|
event_id | One event's result. |
league | Results for one league, such as nfl. On the free Developer plan, league is required. |
starts_after, starts_before | A window on the events' scheduled start, in UTC. |
limit, cursor | Results per page and the next page. See Pagination. |
Here is the result of an NFL game that has been played:
curl -sS "https://api.sockodds.com/v1/results?event_id=ev_000ckk06psy5" \
-H "Authorization: Bearer $SOCKODDS_API_KEY"const response = await fetch("https://api.sockodds.com/v1/results?event_id=ev_000ckk06psy5", {
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/results?event_id=ev_000ckk06psy5",
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": [
{
"event": {
"id": "ev_000ckk06psy5",
"name": "Arizona Cardinals v Atlanta Falcons",
"league": {
"key": "nfl",
"name": "NFL"
},
"scheduled_start": "2026-10-12T08:00:00.000Z",
"status": "final",
"participants": [
{
"role": "away",
"identity": {
"key": "atlanta_falcons",
"name": "Atlanta Falcons"
}
},
{
"role": "home",
"identity": {
"key": "arizona_cardinals",
"name": "Arizona Cardinals"
}
}
]
},
"status": "final",
"settlement": "partial",
"pending_markets": 1,
"settled_at": "2026-10-12T12:00:00.000Z",
"outcomes": [
{
"id": "oc_1dppq89hj6hzh2vs",
"name": "Arizona Cardinals",
"verdict": "won",
"market": {
"id": "mk_w3g0d83k64amvfmc",
"key": "winner",
"name": "Winner",
"period": "full",
"subject": null
},
"side": "home",
"line": null
},
{
"id": "oc_9cefdq0gf0ng5wz9",
"name": "Arizona Cardinals",
"verdict": "won",
"market": {
"id": "mk_809y8e9bfgq739jt",
"key": "handicap",
"name": "Handicap",
"period": "full",
"subject": null
},
"side": "home",
"line": -3.5
},
{
"id": "oc_cde9mrxgjh51dkzy",
"name": "Atlanta Falcons",
"verdict": "lost",
"market": {
"id": "mk_w3g0d83k64amvfmc",
"key": "winner",
"name": "Winner",
"period": "full",
"subject": null
},
"side": "away",
"line": null
},
{
"id": "oc_mrajcnv0jg71twnp",
"name": "Atlanta Falcons",
"verdict": "lost",
"market": {
"id": "mk_809y8e9bfgq739jt",
"key": "handicap",
"name": "Handicap",
"period": "full",
"subject": null
},
"side": "away",
"line": 3.5
}
]
}
],
"meta": {
"count": 1,
"cursor": null
},
"links": {
"next": null
}
}Reading a result
| Field | What it holds |
|---|---|
event | The event, in the same shape as /v1/events/{event_id}. |
status | final, or corrected when the official source changed a result after we first published it. |
settlement | complete when every market we quoted on the event is settled. partial while any market is still pending. |
pending_markets | How many quoted markets are still waiting for official evidence. |
settled_at | When the result was last settled or extended, in UTC. |
outcomes | The graded outcomes. |
Each outcome has its id, name, side and line, the market it belongs to (id, key, name, period, subject), and a verdict:
verdict | Meaning |
|---|---|
won | The selection won. |
lost | The selection lost. |
void | The bet is void and the stake is returned. |
dead_heat | A tie the rules settle as a dead heat. dead_heat_factor is the share of the stake paid at the quoted price; the rest of the stake is lost. |
A dead heat pays stake × dead_heat_factor × price. A $10 bet at 1.90 with a factor of 0.5 returns $9.50. Dead heats with a factor of 0.5 apply to a drawn AFL or AFLW head to head, a drawn AFLW quarter or half winner, and a Rugby League World Cup head to head still level after golden point.
Partial results grow, they do not change
Each market settles on its own once official evidence settles all of its outcomes. So a result can be published with settlement: partial while some markets wait, for example player markets that need detail the official source has not published yet. When more markets settle, the same event's result gains the new outcomes and pending_markets falls. Verdicts already published stay as they are.
If an official source corrects a result, the event's status becomes corrected and settled_at moves later. Re-read any event whose status or settled_at changed since you last settled it.
What you will not find
- Events we never priced. Results grade the outcomes we quoted, so an event with no prices has no result.
- Guesses. A tie with no published rule, an unusual finish, or a player whose participation the official source does not confirm stays pending.
- A zero. A missing verdict means the outcome is not settled yet, never that it lost.
Settle from a program
This program reads NFL results and prints each outcome's verdict:
const response = await fetch("https://api.sockodds.com/v1/results?league=nfl", {
headers: { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` },
});
const body = await response.json();
for (const result of body.data) {
const pending = result.pending_markets === 1 ? "1 market" : `${result.pending_markets} markets`;
console.log(`${result.event.name}: ${result.settlement}, ${pending} pending`);
for (const outcome of result.outcomes) {
const line = outcome.line === null ? "" : ` ${outcome.line > 0 ? "+" : ""}${outcome.line}`;
const share = outcome.verdict === "dead_heat" ? ` (${outcome.dead_heat_factor} of the stake)` : "";
console.log(` ${outcome.market.name} (${outcome.market.period}): ${outcome.name}${line} ${outcome.verdict}${share}`);
}
}import json, os, urllib.request
request = urllib.request.Request(
"https://api.sockodds.com/v1/results?league=nfl",
headers={"Authorization": "Bearer " + os.environ["SOCKODDS_API_KEY"]},
)
with urllib.request.urlopen(request) as response:
body = json.load(response)
for result in body["data"]:
pending = "1 market" if result["pending_markets"] == 1 else f"{result['pending_markets']} markets"
print(f"{result['event']['name']}: {result['settlement']}, {pending} pending")
for outcome in result["outcomes"]:
line = "" if outcome["line"] is None else " " + ("+" if outcome["line"] > 0 else "") + str(outcome["line"])
share = f" ({outcome['dead_heat_factor']} of the stake)" if outcome["verdict"] == "dead_heat" else ""
print(f" {outcome['market']['name']} ({outcome['market']['period']}): {outcome['name']}{line} {outcome['verdict']}{share}")Output from a local copy of the API with invented test prices
Arizona Cardinals v Atlanta Falcons: partial, 1 market pending
Winner (full): Arizona Cardinals won
Handicap (full): Arizona Cardinals -3.5 won
Winner (full): Atlanta Falcons lost
Handicap (full): Atlanta Falcons +3.5 lostFor a ledger that settles bets as results arrive, see Settle bets.