Use with Claude Code, Codex & AI Agents
A fresh agent session, given nothing but this page, should be able to discover and use SportWizzard's live sports betting data with no human help. Everything below is copy-paste — real endpoints, real responses, verified this session.
Base URL & authentication
Every endpoint lives under /api/v1 and returns one consistent envelope: { success, data, nextCursor, meta }. Authenticate with the X-Api-Key header — Authorization: Bearer <api_key> also works, if that's what your tooling defaults to. Reference endpoints (/leagues, /seasons, /sportsbooks, /teams, /players, /markets, /status, /events) require no key at all.
Current state (pre-billing, transitional): billing enforcement hasn't flipped on yet, so every endpoint — including odds, stats, edges, and arbitrage — is currently reachable with no key. Send one anyway if you have it; don't build automation that assumes anonymous access stays open. Get a key at your account (API Keys tab, requires sign-in).
The endpoints to start with
1. Discover what's live
Leagues are seasonal and rotate — call this before assuming a league has no data.
curl "https://api.sportwizzard.com/api/v1/leagues"
# {"success":true,"data":["mma","dota2","mlb","brazil-sa","lol","fifa-world-cup",
# "tennis","wnba","cs2","pga-tour","mls"],"meta":{"count":11}}A league not in that list (e.g. nba/nfl outside their season) still returns 200 from /odds//events//edges — with a valid, empty data: []. That means "out of season," not "broken" or "unsupported." Those responses also carry a meta.note explaining which requested league has no season and listing the active ones — the hint travels with the response, so you don't have to guess.
2. List events for a league
curl "https://api.sportwizzard.com/api/v1/events?league=mlb&limit=3"3. Pull live odds
Scope with any of league/sportsbook/market/event_id/player_id/team_id — unscoped paginates hard.
curl "https://api.sportwizzard.com/api/v1/odds?league=mlb&limit=5" \
-H "X-Api-Key: sw_live_your_api_key_here"4. DFS edges & arbitrage (derived signals)
Soft DFS lines vs. sharp-book no-vig fair value — a screening signal to verify yourself, not a guaranteed +EV bet.
curl "https://api.sportwizzard.com/api/v1/edges?min_edge=0.02&limit=5" \
-H "X-Api-Key: sw_live_your_api_key_here"
curl "https://api.sportwizzard.com/api/v1/arbitrage?min_profit=0.01&limit=5" \
-H "X-Api-Key: sw_live_your_api_key_here"5. Bootstrap a full local copy
curl --compressed "https://api.sportwizzard.com/api/v1/snapshot" \
-H "X-Api-Key: sw_live_your_api_key_here" -o snapshot.json
# then stay in sync: /api/v1/odds/updated?since={last-sync-timestamp}MCP server setup
20 read-only tools over the same v1 API
Live odds, DFS edges, cross-book arbitrage, events, box-score stats, and reference data — as MCP tools instead of raw HTTP. Open source: github.com/adamruehle/sportwizzard-mcp.
Hosted (recommended, no install): Streamable HTTP at mcp.sportwizzard.com, bearer-key auth. Verified live this session — a request with no key gets a clear JSON-RPC error pointing at /account, not a connection failure.
claude mcp add --transport http sportwizzard https://mcp.sportwizzard.com/mcp \
--header "Authorization: Bearer sw_live_your_api_key_here"From source (stdio): no clone/build step needed — npx installs straight from GitHub:
npx -y github:adamruehle/sportwizzard-mcpThe shorter npx -y sportwizzard-mcp (no github: prefix) will work once published to npm — as of this page's last verification the package was not yet on the registry (404); the form above works today regardless.
{
"mcpServers": {
"sportwizzard": {
"type": "http",
"url": "https://mcp.sportwizzard.com/mcp",
"headers": {
"Authorization": "Bearer sw_live_..."
}
}
}
}{
"mcpServers": {
"sportwizzard": {
"command": "npx",
"args": ["-y", "github:adamruehle/sportwizzard-mcp"],
"env": { "SPORTWIZZARD_API_KEY": "sw_live_..." }
}
}
}{ "env": { "SPORTWIZZARD_MOCK": "1" } }Ground rules for agents
Don't hardcode a league list — resolve it from /api/v1/leagues at call time. Odds rows are flat and self-describing (one row per sportsbook × market × selection) — group by eventId to reconstruct a board, and filter on side/market/marketSubtype rather than parsing the human-readable selection string. /edges and /arbitrage are convenience signals computed from the same odds data, not guarantees — relay that caveat if you surface them to a user. Cursors (nextCursor) are opaque — pass them back verbatim.
Further reading
AGENTS.md (this content, plain text) · llms-full.txt (every endpoint, full example requests/responses) · openapi.json (machine-readable spec, source of truth for response shapes) · Interactive reference (try-it console) · Human-readable docs.