{"openapi":"3.1.0","info":{"title":"The Odds API (BYOK) API","version":"0.1.0","description":"The Odds API (BYOK) lets an AI assistant read your own The Odds API data through the The Odds API API with a key you supply (API key). Read-only: 7 tools (list_sports, get_odds, get_scores, list_events, get_event_odds, get_event_markets, list_participants). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-oddsapi.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-oddsapi/docs"},"termsOfService":"https://connectorbay.com/byok-oddsapi/terms"},"servers":[{"url":"https://byok-oddsapi.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-oddsapi/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_sports":{"post":{"operationId":"list_sports","summary":"List the sports and leagues covered, each with its key, group, title and whether outright markets exist. Does not use qu","description":"List the sports and leagues covered, each with its key, group, title and whether outright markets exist. Does not use quota. Use for \"Which sports does The Odds API cover right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include out-of-season sports as well as in-season ones.","title":"All"}},"title":"list_sportsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_odds":{"post":{"operationId":"get_odds","summary":"Get upcoming and live games of one sport with bookmaker prices. Quota cost is the number of markets times the number of ","description":"Get upcoming and live games of one sport with bookmaker prices. Quota cost is the number of markets times the number of regions. Use for \"What are the moneyline and spread odds for upcoming NBA games in the US\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"},"regions":{"description":"Comma-separated bookmaker regions: us, us2, uk, au or eu. Each region multiplies the quota cost.","maxLength":40,"title":"Regions","type":"string"},"markets":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"h2h","description":"Comma-separated markets: h2h, spreads, totals or outrights (default h2h).","title":"Markets"},"odds_format":{"anyOf":[{"enum":["decimal","american"],"type":"string"},{"type":"null"}],"default":"decimal","description":"Price style: decimal or american.","title":"Odds Format"},"date_format":{"anyOf":[{"enum":["iso","unix"],"type":"string"},{"type":"null"}],"default":"iso","description":"Timestamp style: iso or unix.","title":"Date Format"},"event_ids":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated event ids to return only those games.","title":"Event Ids"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys; takes priority over regions.","title":"Bookmakers"},"commence_time_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only games starting at or after this ISO 8601 time, for example 2026-10-20T00:00:00Z.","title":"Commence Time From"},"commence_time_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only games starting at or before this ISO 8601 time.","title":"Commence Time To"}},"required":["sport","regions"],"title":"get_oddsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_scores":{"post":{"operationId":"get_scores","summary":"Get live and recently completed scores for one sport; without days_from only live and upcoming games are returned. Costs","description":"Get live and recently completed scores for one sport; without days_from only live and upcoming games are returned. Costs 1 quota unit, 2 with days_from. Use for \"What were last night's NBA final scores\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"},"days_from":{"anyOf":[{"maximum":3,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Also return completed games from this many days back (1 to 3).","title":"Days From"},"date_format":{"anyOf":[{"enum":["iso","unix"],"type":"string"},{"type":"null"}],"default":"iso","description":"Timestamp style: iso or unix.","title":"Date Format"},"event_ids":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated event ids to return only those games.","title":"Event Ids"}},"required":["sport"],"title":"get_scoresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_events":{"post":{"operationId":"list_events","summary":"List upcoming and live games of one sport with teams and start time, without prices. Does not use quota. Use for \"Which ","description":"List upcoming and live games of one sport with teams and start time, without prices. Does not use quota. Use for \"Which Premier League matches are coming up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"},"date_format":{"anyOf":[{"enum":["iso","unix"],"type":"string"},{"type":"null"}],"default":"iso","description":"Timestamp style: iso or unix.","title":"Date Format"},"event_ids":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated event ids to return only those games.","title":"Event Ids"},"commence_time_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only games starting at or after this ISO 8601 time.","title":"Commence Time From"},"commence_time_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only games starting at or before this ISO 8601 time.","title":"Commence Time To"}},"required":["sport"],"title":"list_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_odds":{"post":{"operationId":"get_event_odds","summary":"Get bookmaker prices for one game, including any market such as player props. Quota cost is markets times regions. Use f","description":"Get bookmaker prices for one game, including any market such as player props. Quota cost is markets times regions. Use for \"What are the player touchdown prop odds for this NFL game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"},"event_id":{"description":"Event id from list_events, for example '19699ba901294e39cb07fc4f19929a38'.","maxLength":200,"title":"Event Id","type":"string"},"regions":{"description":"Comma-separated bookmaker regions: us, us2, uk, au or eu. Each region multiplies the quota cost.","maxLength":40,"title":"Regions","type":"string"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"h2h","description":"Comma-separated market keys, for example h2h,spreads or player_pass_tds (default h2h).","title":"Markets"},"odds_format":{"anyOf":[{"enum":["decimal","american"],"type":"string"},{"type":"null"}],"default":"decimal","description":"Price style: decimal or american.","title":"Odds Format"},"date_format":{"anyOf":[{"enum":["iso","unix"],"type":"string"},{"type":"null"}],"default":"iso","description":"Timestamp style: iso or unix.","title":"Date Format"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys; takes priority over regions.","title":"Bookmakers"}},"required":["sport","event_id","regions"],"title":"get_event_oddsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event_markets":{"post":{"operationId":"get_event_markets","summary":"List which market keys each bookmaker currently offers for one game, without prices. Costs 1 quota unit. Use for \"Which ","description":"List which market keys each bookmaker currently offers for one game, without prices. Costs 1 quota unit. Use for \"Which betting markets are available for this MLB game\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"},"event_id":{"description":"Event id from list_events, for example '19699ba901294e39cb07fc4f19929a38'.","maxLength":200,"title":"Event Id","type":"string"},"regions":{"description":"Comma-separated bookmaker regions: us, us2, uk, au or eu. Each region multiplies the quota cost.","maxLength":40,"title":"Regions","type":"string"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker keys; takes priority over regions.","title":"Bookmakers"},"date_format":{"anyOf":[{"enum":["iso","unix"],"type":"string"},{"type":"null"}],"default":"iso","description":"Timestamp style: iso or unix.","title":"Date Format"}},"required":["sport","event_id","regions"],"title":"get_event_marketsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_participants":{"post":{"operationId":"list_participants","summary":"List the teams or players known for a sport; for team sports these are teams, not squad members. Costs 1 quota unit. Use","description":"List the teams or players known for a sport; for team sports these are teams, not squad members. Costs 1 quota unit. Use for \"List all NFL teams known to The Odds API\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport key from list_sports, for example 'basketball_nba' or 'soccer_epl'.","maxLength":200,"title":"Sport","type":"string"}},"required":["sport"],"title":"list_participantsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}