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.
View Overlay File View on GitHub Overlay Specification

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

Raw ↑
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 }