{"openapi":"3.1.0","info":{"title":"Odds API IO (BYOK) API","version":"0.1.0","description":"Odds API IO (BYOK) lets an AI assistant read your own Odds API IO data through the Odds API IO API with a key you supply (Odds-API.io API key). Read-only: 12 tools (list_sports, list_bookmakers, list_leagues, list_events, list_live_events, search_events, get_event, get_event_odds, get_odds_movements, get_odds_summary, list_dropping_odds, list_value_bets). The BYOK key travels with each request,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-oddsapiio.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-oddsapiio/docs"},"termsOfService":"https://connectorbay.com/byok-oddsapiio/terms"},"servers":[{"url":"https://byok-oddsapiio.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-oddsapiio/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 covered with their slugs (needed for the other tools). Needs no quota. Use for \"Which sports does Odds-A","description":"List the sports covered with their slugs (needed for the other tools). Needs no quota. Use for \"Which sports does Odds-API.io cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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/list_bookmakers":{"post":{"operationId":"list_bookmakers","summary":"List the bookmakers available with their active flag (names are used in the odds tools). Use for \"Which bookmakers are a","description":"List the bookmakers available with their active flag (names are used in the odds tools). Use for \"Which bookmakers are available\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_bookmakersArguments","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_leagues":{"post":{"operationId":"list_leagues","summary":"List the leagues of a sport with their slugs and number of events. Use for \"Which football leagues have events\".","description":"List the leagues of a sport with their slugs and number of events. Use for \"Which football leagues have events\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport slug from list_sports, for example 'football'.","maxLength":200,"title":"Sport","type":"string"},"all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include leagues without current events.","title":"All"}},"required":["sport"],"title":"list_leaguesArguments","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 or live events of a sport, optionally by league, team, status, date range or bookmaker, with scores and bo","description":"List upcoming or live events of a sport, optionally by league, team, status, date range or bookmaker, with scores and bookmaker count. Use for \"What football events are coming up in the Premier League\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"description":"Sport slug from list_sports, for example 'football'.","maxLength":200,"title":"Sport","type":"string"},"league":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"League slug from list_leagues.","title":"League"},"participant_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only events of this team or player id.","title":"Participant Id"},"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Event status such as pending or live.","title":"Status"},"from_time":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events from this ISO 8601 time.","title":"From Time"},"to_time":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events until this ISO 8601 time.","title":"To Time"},"bookmaker":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events this bookmaker has odds for.","title":"Bookmaker"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many events to return.","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many events to skip.","title":"Skip"}},"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/list_live_events":{"post":{"operationId":"list_live_events","summary":"List events in play now with live scores, status and match clock, optionally for one sport. Use for \"Which matches are l","description":"List events in play now with live scores, status and match clock, optionally for one sport. Use for \"Which matches are live right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sport slug; leave out for all sports.","title":"Sport"}},"title":"list_live_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/search_events":{"post":{"operationId":"search_events","summary":"Search upcoming or live events by team or player name. Use for \"Find upcoming events for Arsenal\".","description":"Search upcoming or live events by team or player name. Use for \"Find upcoming events for Arsenal\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Name to search for, for example 'Arsenal'.","maxLength":100,"title":"Query","type":"string"},"status":{"anyOf":[{"enum":["upcoming","live"],"type":"string"},{"type":"null"}],"default":"upcoming","description":"Which events to search.","title":"Status"}},"required":["query"],"title":"search_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":{"post":{"operationId":"get_event","summary":"Get one event by id with teams, league, date, status and scores. Use for \"Show event 12345678\".","description":"Get one event by id with teams, league, date, status and scores. Use for \"Show event 12345678\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Event id from list_events.","minimum":1,"title":"Id","type":"integer"}},"required":["id"],"title":"get_eventArguments","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 the current odds of one event from the chosen bookmakers, by market (moneyline, spreads, totals and others). Use for","description":"Get the current odds of one event from the chosen bookmakers, by market (moneyline, spreads, totals and others). Use for \"What are the odds for event 12345678 at Bet365\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"event_id":{"description":"Event id from list_events.","maxLength":200,"title":"Event Id","type":"string"},"bookmakers":{"description":"Comma-separated bookmaker names from list_bookmakers, for example 'Bet365,Unibet' (required; the plan limits how many).","maxLength":200,"title":"Bookmakers","type":"string"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market names to include, for example 'ML,Spread'.","title":"Markets"}},"required":["event_id","bookmakers"],"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_odds_movements":{"post":{"operationId":"get_odds_movements","summary":"Get how one bookmaker's odds for a market of an event moved: opening, latest and all recorded movements. Use for \"How ha","description":"Get how one bookmaker's odds for a market of an event moved: opening, latest and all recorded movements. Use for \"How have the Bet365 moneyline odds for event 12345678 moved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"event_id":{"description":"Event id from list_events.","maxLength":200,"title":"Event Id","type":"string"},"bookmaker":{"description":"Bookmaker name.","maxLength":200,"title":"Bookmaker","type":"string"},"market":{"description":"Market name such as 'ML'.","maxLength":200,"title":"Market","type":"string"},"market_line":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Line value for spread or total markets, for example '2.5'.","title":"Market Line"}},"required":["event_id","bookmaker","market"],"title":"get_odds_movementsArguments","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_summary":{"post":{"operationId":"get_odds_summary","summary":"Get a cross-bookmaker summary of one event's markets: each line with the books offering it, fair prices and payout. Use ","description":"Get a cross-bookmaker summary of one event's markets: each line with the books offering it, fair prices and payout. Use for \"Summarise the odds across bookmakers for event 12345678\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"event_id":{"description":"Event id from list_events.","maxLength":200,"title":"Event Id","type":"string"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market names.","title":"Markets"},"bookmakers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated bookmaker names to include.","title":"Bookmakers"},"include_exchanges":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include exchanges such as prediction markets.","title":"Include Exchanges"}},"required":["event_id"],"title":"get_odds_summaryArguments","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_dropping_odds":{"post":{"operationId":"list_dropping_odds","summary":"List selections whose odds dropped most since opening or within 12, 24 or 48 hours, with the bookmaker and current price","description":"List selections whose odds dropped most since opening or within 12, 24 or 48 hours, with the bookmaker and current price. Use for \"Which football odds have dropped the most in the last 24 hours\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sport":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sport slug.","title":"Sport"},"league":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"League slug.","title":"League"},"markets":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated market names.","title":"Markets"},"time_window":{"anyOf":[{"enum":["opening","12h","24h","48h"],"type":"string"},{"type":"null"}],"default":"opening","description":"Window for the drop.","title":"Time Window"},"min_drop":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":0,"description":"Minimum drop to include.","title":"Min Drop"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results (1 to 200).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number.","title":"Page"},"include_event_details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to include event details with each result.","title":"Include Event Details"}},"title":"list_dropping_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/list_value_bets":{"post":{"operationId":"list_value_bets","summary":"List prices at a bookmaker that are above a fair-odds estimate, with expected value. Use for \"What value bets does Bet36","description":"List prices at a bookmaker that are above a fair-odds estimate, with expected value. Use for \"What value bets does Bet365 have today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bookmaker":{"description":"Bookmaker name.","maxLength":200,"title":"Bookmaker","type":"string"},"sport":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sport slug.","title":"Sport"},"league":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"League slug.","title":"League"},"include_event_details":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to include event details with each result.","title":"Include Event Details"}},"required":["bookmaker"],"title":"list_value_betsArguments","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}}}}