OddsWire API
Programmatic access to real-time arbitrage, picks, and odds data
Quick Start
Include your API key via the X-API-Key header or ?key= query parameter.
cURL
# Using header (recommended)
curl -H 'X-API-Key: YOUR_KEY' https://oddswire.bet/api/v1/markets
# Using query parameter
curl 'https://oddswire.bet/api/v1/picks?key=YOUR_KEY'Python
import requests
headers = {"X-API-Key": "YOUR_KEY"}
r = requests.get("https://oddswire.bet/api/v1/markets", headers=headers)
markets = r.json()["data"]
# Get tonight's top picks
picks = requests.get("https://oddswire.bet/api/v1/picks", headers=headers).json()
for pick in picks["data"]:
print(f"{pick['title']} — {pick['recommendation']['call']} ({pick['recommendation']['confidence']})")JavaScript
const res = await fetch('https://oddswire.bet/api/v1/arbitrage', {
headers: { 'X-API-Key': 'YOUR_KEY' }
});
const { data: arbs } = await res.json();
arbs.forEach(a => console.log(`${a.gap}pt gap: ${a.direction}`));Authentication
All data endpoints require an API key. Keys are included in the $499/month API Access tier. Pass your key via the X-API-Key header (recommended) or as a ?key= query parameter.
Rate limit: 300 requests/minute per key. Data streams in real time via sub-second SSE feeds. Exceeding the rate limit returns a 429 with a retry_after field.
Endpoints
/api/v1/marketsReturns all active markets with scores, recommendations, and pricing data. Updated in real time.
| Parameter | Type | Description |
|---|---|---|
category | string | Filter by category: sports, crypto, politics, etc. |
min_score | int | Minimum score threshold (default: 0). Use 5+ for top picks. |
confidence | string | Filter by confidence: STRONG, MODERATE, SPECULATIVE |
limit | int | Max results (default: 100, max: 200) |
Example Response
{
"endpoint": "/api/v1/markets",
"count": 42,
"scan_timestamp": "2026-04-07T22:15:30+00:00",
"data": [
{
"ticker": "KXNBA-LALLAC",
"title": "LA Lakers vs LA Clippers Winner?",
"yes_price": 0.65,
"implied_prob": 65.0,
"volume": 15200,
"score": 7,
"recommendation": {
"call": "LA Clippers",
"confidence": "STRONG",
"source": "vegas",
"edge_note": "Vegas 72% vs Kalshi 65% — 7pt gap"
}
}
]
}/api/v1/arbitrageReturns active arbitrage opportunities between Kalshi, Polymarket, and major sportsbooks. Each opportunity includes buy/sell directions and gap size.
| Parameter | Type | Description |
|---|---|---|
quality | string | Filter: high, medium, low |
min_gap | float | Minimum gap in percentage points (default: 0) |
window | string | Settlement window: tonight, this_week, long_dated |
Example Response
{
"endpoint": "/api/v1/arbitrage",
"count": 3,
"data": [
{
"kalshi_title": "Lakers vs Clippers Winner?",
"gap": 8.5,
"direction": "BUY YES on Polymarket, SELL YES on Kalshi",
"quality": "high",
"settlement_window": "tonight",
"buy_platform": "Polymarket",
"buy_price": 56.5,
"sell_platform": "Kalshi",
"sell_price": 65.0
}
]
}/api/v1/picksReturns today's top picks — markets scoring 5+ with STRONG or MODERATE confidence. Sorted by score descending.
| Parameter | Type | Description |
|---|---|---|
min_score | int | Minimum score (default: 5) |
/api/v1/historyReturns odds movement history. Without a ticker, returns overview. With a ticker, returns that market's price history over the last hour (30-second intervals).
| Parameter | Type | Description |
|---|---|---|
ticker | string | Market ticker (e.g. KXNBA-LALLAC) for per-market history |
limit | int | Max snapshots to return (default: 120, max: 120) |
/api/v1/teamsReturns ESPN team data with Vegas moneylines, records, and matchup information for today's games.
| Parameter | Type | Description |
|---|---|---|
sport | string | Filter: nba, mlb, nhl, nfl |
/api/v1/statusHealth check endpoint. Returns API version, scan status, and available endpoints. No authentication required.
Error Codes
| Code | Meaning | Response |
|---|---|---|
200 | Success | Data returned in data field |
401 | Unauthorized | Missing or invalid API key |
404 | Not Found | Unknown endpoint |
429 | Rate Limited | Too many requests — wait retry_after seconds |