Docs FastAPI

Developer Documentation for the Odds API

This page contains the WagerWise Odds API documentation. All endpoints require an API key.

Base URL: https://wagerwise-odds.com

Tip: This page is static; update example URLs in the source if you change environments.

Authentication

Send your key with each request in the header. If the key is missing or invalid you will receive 401 Unauthorized. Some endpoints also enforce feature flags and may return 403 Forbidden.

cURL

bash
curl -H "X-API-Key: YOUR_KEY" https://wagerwise-odds.com/

Security best practice: keep API keys on your server; never ship them in public client code.

Endpoints

All endpoints below are available under the Base URL and require X-API-Key.

GET or POST /api/fixtures

Returns scheduled games grouped by league. With odds_data_id's included.

Headers: X-API-Key: YOUR_KEY
bash
curl -H "X-API-Key: YOUR_KEY" \
  https://wagerwise-odds.com/api/fixtures
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.get(f"{BASE}/api/fixtures", headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/api/fixtures`, { headers: { "X-API-Key": KEY } })
  .then(r => r.json())
  .then(console.log);
Response shape
json
{
  "Premier League": {
    "game_masterID": {
      "sport": "soccer",
      "league_name": "Premier League",
      "start_time": "2025-08-21T18:00:00Z",
      "team_names": { "home_team": "Team A", "away_team": "Team B" },
      "game_masterID": "game_masterID",
      "last_updated_at": "2025-08-20T12:34:56Z",
      "bookmaker_data": { "bet365": "odds_data_id", "sportsbet": "odds_data_id" }
    }
  }
}

POST /api/odds

Returns the odds for a specific bookmaker odds data ID.

Body: {"odds_data_id":"odds_data_id"}
bash
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: YOUR_KEY" \
  -d '{"odds_data_id":"odds_data_id"}' \
  https://wagerwise-odds.com/api/odds
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.post(f"{BASE}/api/odds", json={"odds_data_id":"odds_data_id"}, headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/api/odds`, {
  method: "POST",
  headers: { "Content-Type": "application/json", "X-API-Key": KEY },
  body: JSON.stringify({ odds_data_id: "odds_data_id" })
}).then(r => r.json()).then(console.log);
Response (truncated)
json
{
  "total/over 161.5 (full time)": {
    "odds": 1.9,
    "line": "over 161.5",
    "type": "total standard",
    "period": "full time",
    "number_of_outcomes": 0,
    "odds_data_ID": "AFL:9409461:sportsbet",
    "odds_no_vig": 2.016
  }
}

POST /api/results

Returns final results for one or more game_masterID. Requires the account feature flag results_access.

Body: {"game_masterID":"game_masterID"} or {"game_masterID":["ID1","ID2"]}
bash
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: YOUR_KEY" \
  -d '{"game_masterID":["ID1","ID2"]}' \
  https://wagerwise-odds.com/api/results
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.post(f"{BASE}/api/results", json={"game_masterID":["ID1","ID2"]}, headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/api/results`, {
  method: "POST",
  headers: { "Content-Type": "application/json", "X-API-Key": KEY },
  body: JSON.stringify({ game_masterID: ["ID1", "ID2"] })
}).then(r => r.json()).then(console.log);
Response shape
json
{
  "ID1": { "home_score": 102, "away_score": 97, "status": "final" },
  "ID2": "Missing game data: attempt in a few hours"
}

POST /api/results/ev-bet

Fetches EV bet records for one or more betID.

Body: {"betID":"BET_ID"} or {"betID":["ID1","ID2"]}
bash
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: YOUR_KEY" \
  -d '{"betID":["BET123","BET456"]}' \
  https://wagerwise-odds.com/api/results/ev-bet
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.post(f"{BASE}/api/results/ev-bet", json={"betID":["BET123","BET456"]}, headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/api/results/ev-bet`, {
  method: "POST",
  headers: { "Content-Type": "application/json", "X-API-Key": KEY },
  body: JSON.stringify({ betID: ["BET123","BET456"] })
}).then(r => r.json()).then(console.log);
Response fields
json
[{
  "game_masterID": "...",
  "sport": "...",
  "league_name_repr": "...",
  "away_team": "...",
  "home_team": "...",
  "start_time": "...",
  "start_time_TIMESTAMP": "...",
  "betID": "...",
  "latest_timestamp": "...",
  "winning_line": "win|loss|pending",
  "market_type": "...",
  "period": 0,
  "bookmaker_name": "...",
  "line": 1.5,
  "line_repr": "-1.5",
  "match_link": "...",
  "push_line": 0,
  "start_price": 1.85
}]

POST /api/results/arb-bet

Fetches arbitrage bet records for one or more betID, including up to three opposing selections.

Body: {"betID":"BET_ID"} or {"betID":["ID1","ID2"]}
bash
curl -X POST -H "Content-Type: application/json" -H "X-API-Key: YOUR_KEY" \
  -d '{"betID":"BET123"}' \
  https://wagerwise-odds.com/api/results/arb-bet
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.post(f"{BASE}/api/results/arb-bet", json={"betID":"BET123"}, headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/api/results/arb-bet`, {
  method: "POST",
  headers: { "Content-Type": "application/json", "X-API-Key": KEY },
  body: JSON.stringify({ betID: "BET123" })
}).then(r => r.json()).then(console.log);
Response fields
json
{
  "game_masterID": "...",
  "sport": "...",
  "league_name_repr": "...",
  "away_team": "...",
  "home_team": "...",
  "start_time": "...",
  "start_time_TIMESTAMP": "...",
  "betID": "...",
  "latest_timestamp": "...",
  "winning_line": "win|loss|pending",
  "selection_1_bookmaker_name": "...",
  "selection_1_line": 1.9,
  "selection_1_line_repr": "...",
  "selection_1_match_link": "...",
  "selection_1_push_line": 0,
  "selection_2_bookmaker_name": "...",
  "selection_2_line": 2.0,
  "selection_3_bookmaker_name": "...",
  "market_type": "...",
  "period": 0
}

GET or POST /data/{collection_name}

Returns a curated JSON formatted bets. Valid collections:

  • current_middle_bets
  • current_arbitrage
  • current_pos_ev
  • current_freebets
bash
curl -H "X-API-Key: YOUR_KEY" \
  https://wagerwise-odds.com/data/current_pos_ev
python
import requests
BASE = "https://wagerwise-odds.com"
KEY  = "YOUR_KEY"
r = requests.get(f"{BASE}/data/current_pos_ev", headers={"X-API-Key": KEY})
print(r.json())
js
const BASE = "https://wagerwise-odds.com";
const KEY  = "YOUR_KEY";
fetch(`${BASE}/data/current_pos_ev`, { headers: { "X-API-Key": KEY } })
  .then(r => r.json())
  .then(console.log);
Response (array)
json
[{ "betID": "...", "ev": 12.3, "bookmaker": "...", "...": "..." }]

Note: query params percent_limit and membership are reserved and currently ignored.

Errors & Status Codes

All requests count toward your monthly quota; tallied per API key.

200 OK

Successful request.

400 Bad Request

Missing or invalid body parameter (e.g. odds_data_id, game_masterID, betID).

401 Unauthorized

Missing or invalid X-API-Key.

403 Forbidden

Feature not enabled for this API key (e.g. results_access).

404 Not Found

No document found (e.g. missing odds or bets), or unknown collection name.

Support

Questions or issues? Email contact@wagerwise.com.au with your API key (redacted) and the failing endpoint + request ID if available.