OpticOdds Odds API

The odds API from OpticOdds — 3 operation(s) for odds.

Operations 3

GET /fixtures/odds Get live odds for fixtures #
GET /fixtures/odds/historical Get historical odds for a fixture #
GET /markets/active List active markets for fixtures #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/opticodds-odds-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

opticodds-odds-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'OpticOdds sports betting data API - Version 3


    **Pagination**: Endpoints returning lists support two modes.'
  title: OpticOdds API v3 Odds API
  contact:
    name: OpticOdds Support
    url: https://opticodds.com/support
  license:
    name: Proprietary
    url: https://opticodds.com/terms
  version: '3.0'
servers:
- url: https://api.opticodds.com/v3
tags:
- name: Odds
paths:
  /fixtures/odds:
    get:
      security:
      - ApiKeyHeader: []
      - ApiKeyQuery: []
      description: Returns current odds for fixtures filtered by fixture ID, player ID, or team ID. Requires at least one sportsbook.
      tags:
      - Odds
      summary: Get live odds for fixtures
      parameters:
      - description: 'Fixture IDs (use GET /fixtures for valid values). Example: ''202604020E7921D1'''
        name: fixture_id
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Sportsbook IDs (use GET /sportsbooks for valid values). Example: ''draftkings'''
        name: sportsbook
        in: query
        required: true
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Market IDs (use GET /markets for valid values). Example: ''moneyline'''
        name: market
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: Filter by selection name (requires market)
        name: name
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Player IDs (use GET /players for valid values). Example: ''3C093E0F82BD'''
        name: player_id
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Team IDs (use GET /teams for valid values). Example: ''73AEB6743EC2'''
        name: team_id
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: Filter by main line status
        name: is_main
        in: query
        schema:
          type: boolean
      - description: 'Odds format. Valid values: american, decimal, probability, malay, hong_kong, indonesian'
        name: odds_format
        in: query
        schema:
          type: string
          default: american
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.FixtureOddsEnvelope'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
      operationId: getFixturesOdds
      x-operation-id-source: derived
  /fixtures/odds/historical:
    get:
      security:
      - ApiKeyHeader: []
      - ApiKeyQuery: []
      description: Returns historical odds with OLV/CLV and optional timeseries for a single fixture
      tags:
      - Odds
      summary: Get historical odds for a fixture
      parameters:
      - description: 'Fixture ID (use GET /fixtures for valid values). Example: ''202604020E7921D1'''
        name: fixture_id
        in: query
        required: true
        schema:
          type: string
      - description: 'Sportsbook IDs (1-5 required, use GET /sportsbooks for valid values). Example: ''draftkings'''
        name: sportsbook
        in: query
        required: true
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Market IDs (use GET /markets for valid values, required if include_timeseries=true). Example: ''moneyline'''
        name: market
        in: query
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: Filter by main line status
        name: is_main
        in: query
        schema:
          type: boolean
      - description: 'Odds format. Valid values: american, decimal, probability, malay, hong_kong, indonesian'
        name: odds_format
        in: query
        schema:
          type: string
          enum:
          - american
          - decimal
          - probability
          - malay
          - hong_kong
          - indonesian
          default: american
      - description: Include timeseries data (requires market)
        name: include_timeseries
        in: query
        schema:
          type: boolean
          default: false
      - description: Include locked entries in timeseries (requires include_timeseries)
        name: include_locked
        in: query
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.HistoricalOddsEnvelope'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
      operationId: getFixturesOddsHistorical
      x-operation-id-source: derived
  /markets/active:
    get:
      security:
      - ApiKeyHeader: []
      - ApiKeyQuery: []
      description: Returns markets that currently have odds for the given fixtures and sportsbooks
      tags:
      - Odds
      summary: List active markets for fixtures
      parameters:
      - description: 'Fixture IDs (use GET /fixtures for valid values). Example: ''202604020E7921D1'''
        name: fixture_id
        in: query
        required: true
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: 'Sportsbook IDs (use GET /sportsbooks for valid values). Example: ''draftkings'''
        name: sportsbook
        in: query
        required: true
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - description: Filter by main line status
        name: is_main
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.MarketsActiveEnvelope'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ErrorResponse'
      operationId: getMarketsActive
      x-operation-id-source: derived
components:
  schemas:
    github_com_opticodds_api-go_internal_v3_response.Tournament:
      type: object
      properties:
        end_date:
          type: string
          example: '2025-06-20T00:00:00Z'
        id:
          type: string
          example: nba-playoffs-2025
        name:
          type: string
          example: NBA Playoffs 2025
        numerical_id:
          type: integer
          example: 50
        start_date:
          type: string
          example: '2025-04-15T00:00:00Z'
    github_com_opticodds_api-go_internal_v3_response.FixtureOddsEnvelope:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.FixtureWithOdds'
    github_com_opticodds_api-go_internal_v3_response.MarketsActiveEnvelope:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.ActiveMarket'
    github_com_opticodds_api-go_internal_v3_response.FixtureOddLimit:
      type: object
      properties:
        max:
          type: number
    github_com_opticodds_api-go_internal_v3_response.LineValue:
      type: object
      properties:
        points:
          type: number
        price:
          type: number
    github_com_opticodds_api-go_internal_v3_response.BaseLeague:
      type: object
      properties:
        id:
          type: string
          example: nba
        name:
          type: string
          example: NBA
        numerical_id:
          type: integer
          example: 3
    github_com_opticodds_api-go_internal_v3_response.BaseSport:
      type: object
      properties:
        id:
          type: string
          example: basketball
        name:
          type: string
          example: Basketball
        numerical_id:
          type: integer
          example: 2
    github_com_opticodds_api-go_internal_v3_response.Competitor:
      type: object
      properties:
        abbreviation:
          type: string
          example: LAL
        base_id:
          type: integer
          example: 100
        id:
          type: string
          example: lakers
        logo:
          type: string
          example: https://cdn.opticodds.com/logos/lakers.png
        name:
          type: string
          example: Los Angeles Lakers
        numerical_id:
          type: integer
          example: 1
    github_com_opticodds_api-go_internal_v3_response.FixtureWithHistoricalOdds:
      type: object
      properties:
        away_competitors:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Competitor'
        away_team_display:
          type: string
        game_id:
          type: string
        home_competitors:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Competitor'
        home_team_display:
          type: string
        id:
          type: string
        is_live:
          type: boolean
        league:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.BaseLeague'
        numerical_id:
          type: integer
        odds:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.HistoricalOdd'
        season_type:
          type: string
        season_week:
          type: string
        season_year:
          type: string
        sport:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.BaseSport'
        start_date:
          type: string
        status:
          type: string
        tournament:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Tournament'
        venue_location:
          type: string
        venue_name:
          type: string
        venue_neutral:
          type: boolean
    github_com_opticodds_api-go_internal_v3_response.ErrorResponse:
      type: object
      properties:
        error:
          type: string
          example: Invalid API key
    github_com_opticodds_api-go_internal_v3_response.HistoricalOdd:
      type: object
      properties:
        clv:
          description: CLV is the Closing Line Value — the final price+points before the event started.
          allOf:
          - $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.LineValue'
        entries:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.HistoricalOddEntry'
        id:
          type: string
        is_main:
          type: boolean
        market:
          type: string
        market_id:
          type: string
        name:
          type: string
        normalized_selection:
          type: string
        olv:
          description: OLV is the Opening Line Value — the first price+points posted for this selection.
          allOf:
          - $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.LineValue'
        player_id:
          type: string
        points:
          type: number
        selection:
          type: string
        selection_line:
          type: string
        sportsbook:
          type: string
        team_id:
          type: string
    github_com_opticodds_api-go_internal_v3_response.FixtureWithOdds:
      type: object
      properties:
        away_competitors:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Competitor'
        away_team_display:
          type: string
        game_id:
          type: string
        home_competitors:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Competitor'
        home_team_display:
          type: string
        id:
          type: string
        is_live:
          type: boolean
        league:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.BaseLeague'
        numerical_id:
          type: integer
        odds:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.FixtureOdd'
        season_type:
          type: string
        season_week:
          type: string
        season_year:
          type: string
        sport:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.BaseSport'
        start_date:
          type: string
        status:
          type: string
        tournament:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.Tournament'
        venue_location:
          type: string
        venue_name:
          type: string
        venue_neutral:
          type: boolean
    github_com_opticodds_api-go_internal_v3_response.HistoricalOddsEnvelope:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.FixtureWithHistoricalOdds'
    github_com_opticodds_api-go_internal_v3_response.ActiveMarket:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        numerical_id:
          type: integer
    github_com_opticodds_api-go_internal_v3_response.FixtureOdd:
      type: object
      properties:
        deep_link:
          type: object
          additionalProperties:
            type: string
        grouping_key:
          description: GroupingKey links related odds together (e.g., all player props for the same player in the same market).
          type: string
        id:
          type: string
        is_main:
          description: IsMain indicates whether this is the primary/default line for the market (true) vs an alternate line (false).
          type: boolean
        limits:
          $ref: '#/components/schemas/github_com_opticodds_api-go_internal_v3_response.FixtureOddLimit'
        market:
          type: string
        market_id:
          type: string
        name:
          type: string
        normalized_selection:
          description: NormalizedSelection is the standardized selection value (e.g., "home", "away", "over", "under", "yes", "no").
          type: string
        order_book: {}
        player_id:
          type: string
        points:
          description: Points is the spread/handicap/total numeric value for this selection (e.g., -3.5 for a spread bet).
          type: number
        price:
          description: 'Price is the odds value in the requested odds_format (default: American).'
          type: number
        selection:
          description: Selection is the entity of the bet — the team, player, or outcome being wagered on (e.g., "Los Angeles Lakers", "LeBron James").
          type: string
        selection_line:
          description: SelectionLine is the directional qualifier for the selection (e.g., "over", "under"). Null for markets without a direction like moneyline.
          type: string
        source_ids:
          type: object
          additionalProperties:
            type: string
        sportsbook:
          type: string
        team_id:
          type: string
        timestamp:
          description: Timestamp is the Unix epoch timestamp (seconds with decimal) when this odd was last updated.
          type: number
    github_com_opticodds_api-go_internal_v3_response.HistoricalOddEntry:
      type: object
      properties:
        locked:
          type: boolean
        points:
          type: number
        price:
          type: number
        timestamp:
          type: number
  securitySchemes:
    ApiKeyHeader:
      description: API key passed via X-Api-Key header
      type: apiKey
      name: X-Api-Key
      in: header
    ApiKeyQuery:
      description: API key passed via query parameter
      type: apiKey
      name: key
      in: query