OpticOdds · OpenAPI Overlay 1.0.0
API Evangelist enhancements for the OpticOdds v3 API
54 actions
54 updates
documentation
extends
openapi/opticodds-api-v3-openapi.json
Generated by API Evangelist
Written by API Evangelist tooling for OpticOdds's API. It is a proposal applied on top of the contract, not a document OpticOdds publishes.
What the actions change
operationIdx-reversal-operationx-reversal-windowx-reversesnameurlx-documentationx-changelog
Targets 54 · first 16 shown; the file carries all of them
$.info.contact
$.info
$
$.paths['/sports'].get
$.paths['/sports/active'].get
$.paths['/leagues'].get
$.paths['/leagues/active'].get
$.paths['/teams'].get
$.paths['/players'].get
$.paths['/tournaments'].get
$.paths['/tournaments/results'].get
$.paths['/conferences'].get
$.paths['/divisions'].get
$.paths['/sportsbooks'].get
$.paths['/sportsbooks/active'].get
$.paths['/sportsbooks/last-polled'].get
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for the OpticOdds v3 API
version: 1.0.0
extends: openapi/opticodds-api-v3-openapi.json
x-provenance:
generated: '2026-08-27'
method: generated
source: >-
Derived from the harvested contract at
https://api.opticodds.com/api/v3/openapi.json plus
developer.opticodds.com documentation. Never mutates the original.
rationale: >-
The harvested document is a swaggo artifact generated from Go handlers. It
is accurate but carries NO operationId on any of its 51 operations, no tag
descriptions, and a contact URL that 404s. Operation ids are the identifier
every downstream tool (SDK generators, MCP tool binding, the tool crosswalk
in mcp/opticodds-tool-crosswalk.yml, agent skills) needs, so this overlay
supplies them without touching the provider's document. Ids follow the
verbNoun convention the OpticOdds MCP tool names already use.
actions:
- target: $.info.contact
description: >-
info.contact.url advertises https://opticodds.com/support, which returns
HTTP 404 (probed 2026-08-27). Point at the contact page that resolves.
update:
name: OpticOdds Support
url: https://opticodds.com/contact
- target: $.info
description: Record the documentation and changelog locations in the contract itself.
update:
x-documentation: https://developer.opticodds.com/reference/getting-started
x-changelog: https://developer.opticodds.com/changelog
x-status-page: https://status.opticodds.com/
x-llms-txt: https://developer.opticodds.com/llms.txt
x-mcp-server: https://api.opticodds.com/mcp
- target: $
description: >-
The document declares no top-level tags[] block, so the tags used on
operations have names but no descriptions. Supply them.
update:
tags:
- name: sports
description: Sport taxonomy — the root of the reference graph.
- name: leagues
description: Leagues within a sport, with region and gender.
- name: teams
description: Teams and their league/sport membership.
- name: players
description: Player roster data, biography and team membership.
- name: tournaments
description: Tournament groupings, used heavily for golf, tennis and motorsport.
- name: conferences
description: Conference groupings of leagues.
- name: divisions
description: Division groupings of leagues.
- name: sportsbooks
description: The 200+ sportsbooks OpticOdds aggregates, and their poll freshness.
- name: markets
description: Betting markets and market hierarchy, including settleable markets.
- name: market-types
description: Market type registry with valid selections.
- name: fixtures
description: Scheduled and live events. The v3 merge of v2 game and schedule.
- name: odds
description: Priced selections per fixture, sportsbook and market — the grain of the API.
- name: futures
description: Outright and futures markets, priced independently of a fixture.
- name: results
description: Game, player and tournament results.
- name: injuries
description: Injury reports and injury predictions.
- name: parlay
description: Parlay and same-game-parlay pricing, including BYOP and pre-packaged parlays.
- name: grader
description: Bet settlement — grade a settled odds or futures bet.
- name: copilot
description: OpticOdds Copilot generated pricing. Separately licensed.
- name: queue
description: >-
RabbitMQ push-queue lifecycle. The only state-changing operations in
the contract; every start has a matching stop.
- target: $.paths['/sports'].get
update: { operationId: listSports }
- target: $.paths['/sports/active'].get
update: { operationId: listActiveSports }
- target: $.paths['/leagues'].get
update: { operationId: listLeagues }
- target: $.paths['/leagues/active'].get
update: { operationId: listActiveLeagues }
- target: $.paths['/teams'].get
update: { operationId: listTeams }
- target: $.paths['/players'].get
update: { operationId: listPlayers }
- target: $.paths['/tournaments'].get
update: { operationId: listTournaments }
- target: $.paths['/tournaments/results'].get
update: { operationId: getTournamentResults }
- target: $.paths['/conferences'].get
update: { operationId: listConferences }
- target: $.paths['/divisions'].get
update: { operationId: listDivisions }
- target: $.paths['/sportsbooks'].get
update: { operationId: listSportsbooks }
- target: $.paths['/sportsbooks/active'].get
update: { operationId: listActiveSportsbooks }
- target: $.paths['/sportsbooks/last-polled'].get
update: { operationId: getSportsbookLastPolled }
- target: $.paths['/markets'].get
update: { operationId: listMarkets }
- target: $.paths['/markets/active'].get
update: { operationId: listActiveMarkets }
- target: $.paths['/markets/settleable'].get
update: { operationId: listSettleableMarkets }
- target: $.paths['/market-types'].get
update: { operationId: listMarketTypes }
- target: $.paths['/fixtures'].get
update: { operationId: listFixtures }
- target: $.paths['/fixtures/active'].get
update: { operationId: listActiveFixtures }
- target: $.paths['/fixtures/odds'].get
update: { operationId: getFixtureOdds }
- target: $.paths['/fixtures/odds/historical'].get
update: { operationId: getHistoricalFixtureOdds }
- target: $.paths['/fixtures/results'].get
update: { operationId: getFixtureResults }
- target: $.paths['/fixtures/results/head-to-head'].get
update: { operationId: getHeadToHeadResults }
- target: $.paths['/fixtures/player-results'].get
update: { operationId: getFixturePlayerResults }
- target: $.paths['/fixtures/player-results/last-x'].get
update: { operationId: getPlayerResultsLastX }
- target: $.paths['/futures'].get
update: { operationId: listFutures }
- target: $.paths['/futures/odds'].get
update: { operationId: getFutureOdds }
- target: $.paths['/injuries'].get
update: { operationId: listInjuries }
- target: $.paths['/injuries/predictions'].get
update: { operationId: listInjuryPredictions }
- target: $.paths['/grader/odds'].get
update: { operationId: gradeOddsBet }
- target: $.paths['/grader/odds'].post
update: { operationId: gradeOddsBetsBulk }
- target: $.paths['/grader/futures'].get
update: { operationId: gradeFuturesBet }
- target: $.paths['/parlay/odds'].post
update: { operationId: getParlayOdds }
- target: $.paths['/parlay/odds/byop'].post
update: { operationId: getBYOPParlayOdds }
- target: $.paths['/parlays/pre-pack'].get
update: { operationId: listFeaturedParlays }
- target: $.paths['/copilot/fixtures'].get
update: { operationId: listCopilotFixtures }
- target: $.paths['/copilot/fixtures/odds'].get
update: { operationId: getCopilotFixtureOdds }
- target: $.paths['/copilot/fixtures/odds/historical'].get
update: { operationId: getCopilotHistoricalOdds }
- target: $.paths['/copilot/parlay/odds'].get
update: { operationId: getCopilotParlayOdds }
- target: $.paths['/copilot/parlay/odds'].post
update: { operationId: calculateCopilotParlayOdds }
- target: $.paths['/copilot/versions'].get
update: { operationId: listCopilotVersions }
- target: $.paths['/copilot/queue/start'].post
update:
operationId: startCopilotQueue
x-reversal-operation: stopCopilotQueue
x-reversal-window: not-stated
- target: $.paths['/copilot/queue/stop'].post
update:
operationId: stopCopilotQueue
x-reverses: startCopilotQueue
- target: $.paths['/copilot/queue/status'].get
update: { operationId: getCopilotQueueStatus }
- target: $.paths['/copilot/queue/remove-connections'].get
update: { operationId: removeCopilotQueueConnections }
- target: $.paths['/copilot/results/queue/start'].post
update:
operationId: startCopilotResultsQueue
x-reversal-operation: stopCopilotResultsQueue
x-reversal-window: not-stated
- target: $.paths['/copilot/results/queue/stop'].post
update:
operationId: stopCopilotResultsQueue
x-reverses: startCopilotResultsQueue
- target: $.paths['/copilot/results/queue/status'].get
update: { operationId: getCopilotResultsQueueStatus }
- target: $.paths['/fixtures/results/queue/start'].post
update:
operationId: startFixtureResultsQueue
x-reversal-operation: stopFixtureResultsQueue
x-reversal-window: not-stated
- target: $.paths['/fixtures/results/queue/stop'].post
update:
operationId: stopFixtureResultsQueue
x-reverses: startFixtureResultsQueue
- target: $.paths['/fixtures/results/queue/status'].get
update: { operationId: getFixtureResultsQueueStatus }