{"openapi":"3.1.0","info":{"title":"ParlayAPI","description":"Real-time sports odds from **7 bookmakers** + **Novig Exchange** liquidity data.\n\n**66 sports** including MLB, NFL, NBA, NHL, MMA/UFC, and 51 soccer leagues.\n\n**Bookmakers:** DraftKings, FanDuel, Caesars, Bovada, Pinnacle, Underdog Fantasy.\n\n**Exchanges:** Novig (peer-to-peer, with order book liquidity/volume).\n\n**Exclusive features:**\n- Player props with American odds from 5 bookmakers\n- Exchange market liquidity (volume, bid/ask) from Novig\n- Arbitrage detection across all books\n- +EV finder (sharp vs soft book comparison)\n- Cross-book odds comparison\n- Pinnacle closing lines for CLV analysis\n- 1M+ historical odds records (2005-present)\n- Live/in-play odds\n- WebSocket streaming (Business tier+)\n- Python and JavaScript SDKs\n\n**Authentication:** Pass `apiKey` as query parameter or `X-API-Key` header.\n\n**Free tier:** 1,000 credits/month. Sign up at [parlay-api.com](https://parlay-api.com).","version":"3.1.0"},"paths":{"/health":{"get":{"summary":"Health Check","description":"Health check: verifies DB connectivity and data freshness.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout Session. Returns checkout URL.","operationId":"create_checkout_billing_checkout_post","parameters":[{"name":"tier","in":"query","required":true,"schema":{"type":"string","title":"Tier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/portal":{"post":{"tags":["billing"],"summary":"Create Portal","description":"Create Stripe Customer Portal session for self-service management.","operationId":"create_portal_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Stripe webhook receiver. Register at: https://parlay-api.com/billing/webhook","operationId":"stripe_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/success":{"get":{"tags":["billing"],"summary":"Checkout Success","operationId":"checkout_success_billing_success_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/success-page":{"get":{"tags":["billing"],"summary":"Checkout Success Page","operationId":"checkout_success_page_billing_success_page_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/cancel":{"get":{"tags":["billing"],"summary":"Checkout Cancel","operationId":"checkout_cancel_billing_cancel_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/billing/cancel-page":{"get":{"tags":["billing"],"summary":"Checkout Cancel Page","operationId":"checkout_cancel_page_billing_cancel_page_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/signup":{"get":{"tags":["auth"],"summary":"Signup Page","operationId":"signup_page_signup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["auth"],"summary":"Signup Submit","operationId":"signup_submit_signup_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_signup_submit_signup_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"tags":["auth"],"summary":"Login Page","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"tags":["auth"],"summary":"Login Submit","operationId":"login_submit_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_submit_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"get":{"tags":["auth"],"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/dashboard":{"get":{"tags":["dashboard"],"summary":"Dashboard Page","operationId":"dashboard_page_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dashboard/keys/create":{"post":{"tags":["dashboard"],"summary":"Create Key","operationId":"create_key_dashboard_keys_create_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/dashboard/keys/{key_id}/revoke":{"post":{"tags":["dashboard"],"summary":"Revoke Key","operationId":"revoke_key_dashboard_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/keys/{key_id}/delete":{"post":{"tags":["dashboard"],"summary":"Delete Key","description":"Permanently delete a revoked key.","operationId":"delete_key_dashboard_keys__key_id__delete_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/admin":{"get":{"tags":["admin"],"summary":"Admin Dashboard","operationId":"admin_dashboard_dashboard_admin_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dashboard/admin/data":{"get":{"tags":["admin"],"summary":"Admin Data","description":"JSON endpoint for auto-refresh.","operationId":"admin_data_dashboard_admin_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/dashboard/admin/switch-plan":{"post":{"tags":["admin"],"summary":"Switch Plan","operationId":"switch_plan_dashboard_admin_switch_plan_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_switch_plan_dashboard_admin_switch_plan_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports":{"get":{"summary":"List Sports","description":"List available sports. FREE — no credits charged.\n\nReturns 66 sports including MLB, NFL, NBA, NHL, MMA, Boxing, Cricket,\nand 51 soccer leagues (EPL, La Liga, Bundesliga, Serie A, Ligue 1, and more).\n\nSoccer sport keys follow the pattern: soccer_epl, soccer_germany_bundesliga, etc.","operationId":"list_sports_v1_sports_get","parameters":[{"name":"all","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive sports","default":false,"title":"All"},"description":"Include inactive sports"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/events":{"get":{"summary":"List Events","description":"List upcoming events. FREE — no credits charged.","operationId":"list_events_v1_sports__sport_key__events_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"dateFormat","in":"query","required":false,"schema":{"type":"string","default":"iso","title":"Dateformat"}},{"name":"commenceTimeFrom","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commencetimefrom"}},{"name":"commenceTimeTo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commencetimeto"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/odds":{"get":{"summary":"Get Odds","description":"Get odds for upcoming and live events.\n\nCredits: markets_count x regions_count (same formula as the-odds-api).\n\n**66 sports supported** including 51 soccer leagues with Pinnacle, DraftKings, FanDuel, BetMGM.\n\n**Regions:** us, us2, uk, eu, au. Use eu for Pinnacle and European bookmakers.\n\n**Markets:** h2h (moneyline/3-way), spreads, totals.\n\n**Filter by bookmaker:** `?bookmakers=pinnacle,draftkings`\n\n**Example:** `GET /v1/sports/soccer_epl/odds?regions=eu&markets=h2h,spreads&bookmakers=pinnacle`","operationId":"get_odds_v1_sports__sport_key__odds_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"regions","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated: us,us2,uk,eu,au","title":"Regions"},"description":"Comma-separated: us,us2,uk,eu,au"},{"name":"markets","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated: h2h,spreads,totals","default":"h2h","title":"Markets"},"description":"Comma-separated: h2h,spreads,totals"},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"decimal","title":"Oddsformat"}},{"name":"dateFormat","in":"query","required":false,"schema":{"type":"string","default":"iso","title":"Dateformat"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated bookmaker keys (overrides regions)","title":"Bookmakers"},"description":"Comma-separated bookmaker keys (overrides regions)"},{"name":"eventIds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated event IDs","title":"Eventids"},"description":"Comma-separated event IDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/events/{event_id}/odds":{"get":{"summary":"Get Event Odds","description":"Get odds for a single event.","operationId":"get_event_odds_v1_sports__sport_key__events__event_id__odds_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"regions","in":"query","required":true,"schema":{"type":"string","title":"Regions"}},{"name":"markets","in":"query","required":false,"schema":{"type":"string","default":"h2h","title":"Markets"}},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"decimal","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/scores":{"get":{"summary":"Get Scores","description":"Get live scores and recent results. 1-2 credits.\n\nCovers NHL, NBA, MLB, NFL, MMA/UFC, and major soccer leagues via ESPN.\nReturns live game state, scores, period/quarter/inning, and completion status.\n\n**Example:** `GET /v1/sports/icehockey_nhl/scores`","operationId":"get_scores_v1_sports__sport_key__scores_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"daysFrom","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":3,"minimum":1},{"type":"null"}],"title":"Daysfrom"}},{"name":"dateFormat","in":"query","required":false,"schema":{"type":"string","default":"iso","title":"Dateformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/historical/sports/{sport_key}/odds":{"get":{"summary":"Get Historical Odds","description":"Get historical odds at a point in time.\n\nCredits: 10 × markets × regions.","operationId":"get_historical_odds_v1_historical_sports__sport_key__odds_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"ISO 8601 timestamp","title":"Date"},"description":"ISO 8601 timestamp"},{"name":"regions","in":"query","required":true,"schema":{"type":"string","title":"Regions"}},{"name":"markets","in":"query","required":true,"schema":{"type":"string","title":"Markets"}},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"decimal","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/line-movement":{"get":{"summary":"Get Line Movement","description":"Track how odds move over time for an event. 2 credits.\n\nEXCLUSIVE — not available on the-odds-api.","operationId":"get_line_movement_v1_sports__sport_key__line_movement_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"eventId","in":"query","required":true,"schema":{"type":"string","title":"Eventid"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/prediction-markets/{sport_key}":{"get":{"summary":"Get Prediction Markets","description":"Get prediction market prices (Kalshi, Polymarket). 1 credit.\n\nEXCLUSIVE — not available on the-odds-api.","operationId":"get_prediction_markets_v1_prediction_markets__sport_key__get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/props":{"get":{"summary":"Get Props","description":"Get player prop odds. 3 credits.\n\nEXCLUSIVE. Historical and live player prop odds from DraftKings and FanDuel.\nThis data is not available on the-odds-api.\n\n**Supported sports:** NFL, NBA, MLB, NHL (more coming).\n\n**Market keys:** player_pass_yds, player_rush_yds, player_rec_yds, player_points,\nplayer_rebounds, player_assists, player_threes, player_strikeouts, player_total_bases,\nplayer_home_runs, player_goals, player_shots, player_anytime_td, player_pra, and more.\n\n**Example:** `GET /v1/sports/basketball_nba/props?markets=player_points,player_rebounds`\n\n**Filter by player:** `?player=LeBron`\n\nReturns over/under lines with odds from each bookmaker.","operationId":"get_props_v1_sports__sport_key__props_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"markets","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated prop market keys (e.g. player_pass_yds,player_points)","title":"Markets"},"description":"Comma-separated prop market keys (e.g. player_pass_yds,player_points)"},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated bookmaker keys","title":"Bookmakers"},"description":"Comma-separated bookmaker keys"},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by player name (partial match)","title":"Player"},"description":"Filter by player name (partial match)"},{"name":"eventId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event ID","title":"Eventid"},"description":"Filter by event ID"},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"american","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/props/markets":{"get":{"summary":"List Prop Markets","description":"List available prop market keys for a sport. FREE.\n\nReturns all prop market types we have data for (e.g. player_points, player_pass_yds).\nUse these keys with the /props endpoint's markets parameter.","operationId":"list_prop_markets_v1_sports__sport_key__props_markets_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/historical/sports/{sport_key}/closing-odds":{"get":{"summary":"Get Historical Closing Odds","description":"Get historical closing odds from our archive. 10 credits.\n\n**833,000+ odds records** covering 19 soccer leagues from 2005-present.\n\n**Bookmakers with historical data:** Pinnacle (87,000+ records), Bet365, Betway,\nWilliam Hill, Interwetten, Ladbrokes, BetVictor.\n\nIncludes match results (home/away scores) for backtesting.\n\n**Example:** `GET /v1/historical/sports/soccer_epl/closing-odds?bookmakers=pinnacle&season=2023-24`","operationId":"get_historical_closing_odds_v1_historical_sports__sport_key__closing_odds_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated (default: pinnacle)","title":"Bookmakers"},"description":"Comma-separated (default: pinnacle)"},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Season filter (e.g. 2023-24)","title":"Season"},"description":"Season filter (e.g. 2023-24)"},{"name":"dateFrom","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Datefrom"},"description":"Start date (YYYY-MM-DD)"},{"name":"dateTo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Dateto"},"description":"End date (YYYY-MM-DD)"},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"american","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/historical/stats":{"get":{"summary":"Get Historical Stats","description":"Public endpoint. Stats about our historical odds archive.","operationId":"get_historical_stats_v1_historical_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sports/{sport_key}/closing-lines":{"get":{"summary":"Get Closing Lines","description":"Get closing lines (last odds before match start). 5 credits.\n\nEXCLUSIVE. Returns the final odds snapshot for each bookmaker before each\nmatch commenced. Essential for CLV (closing line value) analysis.\n\nSupports all 66 sports. Pinnacle closing lines available for all 51 soccer leagues.\n\n**Bookmakers:** pinnacle (default), draftkings, fanduel, betmgm, caesars, bovada, and more.\n\n**Example:** `GET /v1/sports/soccer_epl/closing-lines?bookmakers=pinnacle&daysFrom=7`\n\nResponse includes h2h (3-way with draw for soccer), spreads, and totals.\nEach event includes the bookmaker's last update timestamp before kickoff.","operationId":"get_closing_lines_v1_sports__sport_key__closing_lines_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmakers"}},{"name":"daysFrom","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":3,"title":"Daysfrom"}},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"american","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/futures":{"get":{"summary":"Get Futures","description":"Get futures/outrights odds (championship winners, MVP, etc). 5 credits.\n\nReturns long-term markets like championship winners, division winners,\nMVP awards, and season-long props.\n\n**Example:** `GET /v1/sports/icehockey_nhl/futures`","operationId":"get_futures_v1_sports__sport_key__futures_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmakers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/live":{"get":{"summary":"Get Live Odds","description":"Get live/in-play odds only. 3 credits.\n\nReturns only live events with real-time odds. Updates every 30 seconds.\nAvailable from DraftKings, Caesars, FanDuel, and Bovada.\n\n**Example:** `GET /v1/sports/icehockey_nhl/live?bookmakers=draftkings,caesars`","operationId":"get_live_odds_v1_sports__sport_key__live_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmakers"}},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"american","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/compare":{"get":{"summary":"Compare Odds","description":"Compare odds across all bookmakers for each event. 5 credits.\n\nEXCLUSIVE. Returns every event with odds from all available bookmakers\nside-by-side, plus the best odds and hold percentage for each outcome.\n\n**Example:** `GET /v1/sports/icehockey_nhl/compare?markets=h2h`\n\nFor each event, returns each bookmaker's odds + which book has the best line.","operationId":"compare_odds_v1_sports__sport_key__compare_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"markets","in":"query","required":false,"schema":{"type":"string","description":"Market type","default":"h2h","title":"Markets"},"description":"Market type"},{"name":"oddsFormat","in":"query","required":false,"schema":{"type":"string","default":"american","title":"Oddsformat"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/arbitrage":{"get":{"summary":"Find Arbitrage","description":"Find arbitrage opportunities across bookmakers. 10 credits.\n\nEXCLUSIVE. Scans all events across all bookmakers and identifies games\nwhere the combined implied probability is less than 100%, meaning a\nguaranteed profit is possible by betting both sides at different books.\n\n**Example:** `GET /v1/sports/icehockey_nhl/arbitrage?minProfit=1`\n\nReturns events with arb opportunities, the optimal bet split, and expected profit %.","operationId":"find_arbitrage_v1_sports__sport_key__arbitrage_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"minProfit","in":"query","required":false,"schema":{"type":"number","description":"Minimum profit % to include (e.g. 1.5)","default":0,"title":"Minprofit"},"description":"Minimum profit % to include (e.g. 1.5)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/ev":{"get":{"summary":"Find Positive Ev","description":"Find +EV bets by comparing sharp vs soft book lines. 10 credits.\n\nEXCLUSIVE. Compares Pinnacle (or another sharp book) lines against\nsoft books (DraftKings, FanDuel, Caesars, Bovada). When a soft book's\nodds imply a lower probability than the sharp book, that's +EV.\n\n**Example:** `GET /v1/sports/icehockey_nhl/ev?sharpBook=pinnacle&minEdge=3`\n\nA 5% edge means the soft book is offering odds that are 5% better than\nthe sharp book's assessment of true probability.","operationId":"find_positive_ev_v1_sports__sport_key__ev_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"sharpBook","in":"query","required":false,"schema":{"type":"string","description":"Sharp book to use as true odds baseline","default":"pinnacle","title":"Sharpbook"},"description":"Sharp book to use as true odds baseline"},{"name":"minEdge","in":"query","required":false,"schema":{"type":"number","description":"Minimum edge % to include","default":2.0,"title":"Minedge"},"description":"Minimum edge % to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sports/{sport_key}/consensus":{"get":{"summary":"Get Consensus","description":"Get consensus (average) odds across all bookmakers. 3 credits.\n\nReturns the average odds, best odds, worst odds, and hold/vig\nfor each market across all bookmakers. Useful for identifying\nwhere your book stands vs the market.","operationId":"get_consensus_v1_sports__sport_key__consensus_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"summary":"Get Usage","description":"Check your API usage and remaining credits.","operationId":"get_usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/stats":{"get":{"summary":"Get Stats","description":"Public endpoint — data availability stats.","operationId":"get_stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/pricing":{"get":{"summary":"Pricing","description":"Pricing comparison — structured for AI readability.","operationId":"pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/exchange/{sport_key}/markets":{"get":{"summary":"Get Exchange Markets","description":"Get exchange/prediction market data with liquidity depth.\n\n**EXCLUSIVE** — No competitor offers this.\n\nReturns real-time order book data from betting exchanges including:\n- Best available prices (bid/ask)\n- Last traded prices\n- Market volume (liquidity in USD)\n- Player props with exchange pricing\n\n**Exchanges:** Novig (peer-to-peer sports exchange)\n\n**Example:** `GET /v1/exchange/icehockey_nhl/markets?min_volume=100`\n\nCredits: 3 per request.","operationId":"get_exchange_markets_v1_exchange__sport_key__markets_get","parameters":[{"name":"sport_key","in":"path","required":true,"schema":{"type":"string","title":"Sport Key"}},{"name":"exchange","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by exchange: novig, kalshi","title":"Exchange"},"description":"Filter by exchange: novig, kalshi"},{"name":"market_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: MONEY, SPREAD, TOTAL, PLAYER_GOALS, etc.","title":"Market Type"},"description":"Filter: MONEY, SPREAD, TOTAL, PLAYER_GOALS, etc."},{"name":"min_volume","in":"query","required":false,"schema":{"type":"number","description":"Minimum volume in USD","default":0,"title":"Min Volume"},"description":"Minimum volume in USD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/exchanges":{"get":{"summary":"List Exchanges","description":"List available betting exchanges. FREE — no auth needed.","operationId":"list_exchanges_v1_exchanges_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api":{"get":{"summary":"Api Root","operationId":"api_root_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/keys":{"post":{"summary":"Create Api Key","description":"Create a free API key. No credit card required.","operationId":"create_api_key_v1_keys_post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_login_submit_login_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"Body_login_submit_login_post"},"Body_signup_submit_signup_post":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"Body_signup_submit_signup_post"},"Body_switch_plan_dashboard_admin_switch_plan_post":{"properties":{"user_id":{"type":"integer","title":"User Id"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["user_id","tier"],"title":"Body_switch_plan_dashboard_admin_switch_plan_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}