Rugby League World Cup Odds in the SockOdds API
League keys, official match ids, periods and settlement rules for both World Cups.
The Rugby League World Cup is in SockOdds API v1 as two leagues: rlwc for the men's tournament and rlwcw for the women's. Both use the rugby league markets, both take their fixtures from the NRL's official draw, and both settle from official match data.
The league keys
Use league=rlwc or league=rlwcw on any route that takes a league: GET /v1/events, GET /v1/odds, GET /v1/markets, GET /v1/teams, GET /v1/players and GET /v1/results. Each league has its own page, Rugby League World Cup and Rugby League World Cup Women's, listing the bookmakers that deliver it and its markets. Both leagues are on the free Developer plan as well as the paid plans; see pricing.
Find a game by its NRL match id
The NRL publishes a match id for every World Cup game. If your own data already uses those ids, GET /v1/events/lookup with source=nrl returns the SockOdds event for one:
curl -sS "https://api.sockodds.com/v1/events/lookup?source=nrl&ref=20261310110" \
-H "Authorization: Bearer $SOCKODDS_API_KEY"const response = await fetch("https://api.sockodds.com/v1/events/lookup?source=nrl&ref=20261310110", {
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/lookup?source=nrl&ref=20261310110",
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_000ckk0nc1tg",
"name": "Australia v New Zealand",
"league": {
"key": "rlwc",
"name": "Rugby League World Cup"
},
"scheduled_start": "2026-10-15T09:05:00.000Z",
"status": "scheduled",
"participants": [
{
"role": "away",
"identity": {
"key": "new_zealand_rugby_league",
"name": "New Zealand"
}
},
{
"role": "home",
"identity": {
"key": "australia_rugby_league",
"name": "Australia"
}
}
]
},
"meta": {
"count": 1,
"cursor": null
},
"links": {
"next": null
}
}An id that matches no event returns 404. Send refs instead of ref to look up to 100 ids at once. Only official ids work here, never a bookmaker's own listing id. From the event id, the odds and results routes take over.
From match id to prices
This program looks up the same game by its NRL match id, then reads TAB's head-to-head, line and total on it:
const headers = { Authorization: `Bearer ${process.env.SOCKODDS_API_KEY}` };
const lookup = await fetch("https://api.sockodds.com/v1/events/lookup?source=nrl&ref=20261310110", { headers });
const event = (await lookup.json()).data;
const response = await fetch(`https://api.sockodds.com/v1/events/${event.id}/odds?bookmakers=tab&markets=winner,handicap,total_points`, { headers });
const odds = (await response.json()).data;
console.log(`${odds.name} (${odds.league.name}), ${odds.scheduled_start}`);
for (const market of odds.markets) {
for (const o of market.outcomes) {
const line = o.line === null ? "" : ` ${o.line}`;
for (const price of o.prices) {
console.log(`${price.bookmaker} ${market.name}: ${o.name}${line} ${price.decimal_odds.toFixed(2)}`);
}
}
}import json, os, urllib.request
def get(url):
request = urllib.request.Request(url, headers={"Authorization": "Bearer " + os.environ["SOCKODDS_API_KEY"]})
with urllib.request.urlopen(request) as response:
return json.load(response)["data"]
event = get("https://api.sockodds.com/v1/events/lookup?source=nrl&ref=20261310110")
odds = get(f"https://api.sockodds.com/v1/events/{event['id']}/odds?bookmakers=tab&markets=winner,handicap,total_points")
print(f"{odds['name']} ({odds['league']['name']}), {odds['scheduled_start']}")
for market in odds["markets"]:
for o in market["outcomes"]:
line = "" if o["line"] is None else f" {o['line']}"
for price in o["prices"]:
print(f"{price['bookmaker']} {market['name']}: {o['name']}{line} {price['decimal_odds']:.2f}")Output from a local copy of the API with invented test prices
Australia v New Zealand (Rugby League World Cup), 2026-10-15T09:05:00.000Z
tab Winner: Australia 1.77
tab Winner: New Zealand 2.18
tab Handicap: Australia -6.5 1.96
tab Handicap: New Zealand 6.5 1.96
tab Total points: Over 40.5 1.93
tab Total points: Under 40.5 1.99The prices come from a local copy of the API with invented numbers.
Periods: full time, golden point and the 80 minutes
Rugby league markets settle on one of four periods: full, regulation, half_1 and half_2. full includes golden point extra time where it is played. regulation is the 80 minutes only, which is the period a three-way result with the draw settles on. Check period on each market before you compare two prices: a full head-to-head and a regulation result are different bets.
A draw after golden point is a dead heat
Golden point can still end level. The contract's results rule is that a Rugby League World Cup head-to-head still level after golden point is a dead heat with a dead_heat_factor of 0.5: half the stake is paid at the quoted price and the other half is lost. The API's settlement notes apply the same rule to the women's tournament.
Results come only from official match data. An outcome that official evidence cannot settle is left out rather than guessed; a tied half winner, for example, stays pending. See results for the full settlement model.
Next
SockOdds provides data only. It does not offer tips or predictions on any game.