SportsAPIs.dev API

SportsAPIs.dev API as documented publicly: 23 operations. Contract generated from the documentation by API Evangelist (2026-10-18); not the provider's own document.

Operations 23

POST /api/mcp Read‑only MCP server over Streamable HTTP with no auth. #
GET /api/picks.json GET /api/picks.json #
GET /api/v1/horses/Final%20Crusade/intelligence GET /api/v1/horses/Final%20Crusade/intelligence #
GET /api/v1/sandbox/horse GET /api/v1/sandbox/horse #
GET /apis/oddsmatrix GET /apis/oddsmatrix #
GET /apis/site/v2/sports/baseball/mlb/scoreboard GET /apis/site/v2/sports/baseball/mlb/scoreboard #
GET /apis/site/v2/sports/basketball/nba/scoreboard GET /apis/site/v2/sports/basketball/nba/scoreboard #
GET /apis/site/v2/sports/football/nfl/scoreboard GET /apis/site/v2/sports/football/nfl/scoreboard #
POST /betbuilder/price POST /betbuilder/price returns bet365's own correlated Bet Builder price #
GET /live-odds GET /live-odds #
GET /nfl/picks GET /nfl/picks #
GET /odds GET /odds #
GET /results/{sport} RapidOddsAPI Review 2026 #
GET /sports/{sportId}/markets RapidOddsAPI Review 2026 #
GET /v1/data/{filename} GET /v1/data/{filename} returns one file inside an envelope with four keys: company, file, updated_at and data. #
POST /v1/estimate Free POST /v1/estimate endpoint to plan a query and price it #
GET /v1/files GET /v1/files lists the files your key can read. #
GET /v1/odds GET /v1/odds #
POST /v1/sports/{sport}/events/{id}/sgp Same-game parlay pricing arrived in September 2026. #
GET /v2/odds/event/{id} GET /v2/odds/event/{id} returns the raw prices for one event. #
GET /v2/odds/{type} GET /v2/odds/{type} returns one matched product: standard, 2up, dutching, each-way, extra-place or bog. #
GET /{sport}/gaps GET /{sport}/gaps returns the same prop at different DFS lines, with the gap already calculated. #
GET /{sport}/lines GET /{sport}/lines removes the vig from Thunderpick, Kalshi and Polymarket and returns one fair probability. #

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/sportsapis-dev:sportsapis-dev-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

sportsapis-dev-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: SportsAPIs.dev API
  version: '2026-10-18'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-18: 23 operation(s) read from 14 public documentation page(s) (each
    operation names its page in x-source). This is not the provider''s published contract; SportsAPIs.dev has published no machine-readable contract
    that the pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 11
    documentation: 12
    pages-with-code: 8
    pages-read: 14
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-10-18'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://sportsapis.dev/espn-api
  - https://sportsapis.dev/apis/rapidoddsapi
  - https://sportsapis.dev/live-sports-odds-api
  - https://sportsapis.dev/apis/lumify
  - https://sportsapis.dev/apis/nopunt
  - https://sportsapis.dev/apis/arbplay
  - https://sportsapis.dev/apis/kashrock
  - https://sportsapis.dev/apis/moviodds
  - https://sportsapis.dev/apis/propline
  - https://sportsapis.dev/apis/oddsrelay
  - https://sportsapis.dev/apis/bet-better
  - https://sportsapis.dev/apis/oddsengine
  - https://sportsapis.dev/apis/oddsmatrix
  - https://sportsapis.dev/apis/horse-truth
servers:
- url: https://api.rapidoddsapi.com
paths:
  /api/mcp:
    post:
      operationId: post_api_mcp
      tags:
      - Api
      summary: Read‑only MCP server over Streamable HTTP with no auth.
      description: NoPunt ships a read‑only MCP server at https://www.nopunt.com/api/mcp. It uses the Streamable HTTP transport with no authentication
        and serves the same free data as the JSON endpoints.
      x-source: https://sportsapis.dev/apis/nopunt
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/picks.json:
    get:
      operationId: get_api_picks_json
      tags:
      - Api
      summary: GET /api/picks.json
      x-source: https://sportsapis.dev/apis/nopunt
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl https://www.nopunt.com/api/picks.json \n Each pick names the game by its stable nflverse id, the two teams, the side the\
          \ model backs, a tier from S down to C, the picked side's win probability as a decimal, the projected margin, the market spread, a vig-free\
          \ moneyline implied by that spread and the best live book moneyline. Kickoff times are ISO 8601 in UTC. Historical weeks add a result\
          \ objec"
  /api/v1/horses/Final%20Crusade/intelligence:
    get:
      operationId: get_api_v1_horses_Final_20Crusade_intelligence
      tags:
      - Api
      summary: GET /api/v1/horses/Final%20Crusade/intelligence
      x-source: https://sportsapis.dev/apis/horse-truth
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl \"https://horsetruth.com.au/api/v1/horses/Final%20Crusade/intelligence\"  -H \"Authorization: Bearer htm_your_key\" \n\
          \ For Final Crusade, a Queensland two-year-old with six starts, the response opened with a one-line headline: a class horse coming into\
          \ form that wants about 1300m, a long straight and a genuinely run race. Under it sat a current rating of 71 against a peak of 103,\
          \ a class index in "
  /api/v1/sandbox/horse:
    get:
      operationId: get_api_v1_sandbox_horse
      tags:
      - Api
      summary: GET /api/v1/sandbox/horse
      x-source: https://sportsapis.dev/apis/horse-truth
      parameters:
      - name: name
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl \"https://horsetruth.com.au/api/v1/sandbox/horse?name=Final%20Crusade\" \n That returns a teaser: the horse's type, best\
          \ distance, form trend, the number of runs analysed and one sample signal of each kind. The paid read is much bigger. We tested it with\
          \ a review key from Horse Truth: "
  /apis/oddsmatrix:
    get:
      operationId: get_apis_oddsmatrix
      tags:
      - Apis
      summary: GET /apis/oddsmatrix
      x-source: https://sportsapis.dev/apis/oddsmatrix
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl one-liner. You contact their sales team, agree on a feed configuration, receive a trial account, and connect using one\
          \ of their pre-built connector apps. The setup process tells you the audience: sportsbook operators and trading desks, not solo developers\
          \ prototyping a side project. \n The product suite splits into several pieces. The Bookmaker Feed delivers raw odds from bookmakers.\
          \ The Marke"
  /apis/site/v2/sports/baseball/mlb/scoreboard:
    get:
      operationId: get_apis_site_v2_sports_baseball_mlb_scoreboard
      tags:
      - Apis
      summary: GET /apis/site/v2/sports/baseball/mlb/scoreboard
      x-source: https://sportsapis.dev/espn-api
      parameters:
      - name: dates
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: javascript
        snippet: fetch(`https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/scoreboard?dates=${date}`)
  /apis/site/v2/sports/basketball/nba/scoreboard:
    get:
      operationId: get_apis_site_v2_sports_basketball_nba_scoreboard
      tags:
      - Apis
      summary: GET /apis/site/v2/sports/basketball/nba/scoreboard
      x-source: https://sportsapis.dev/espn-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl, Python requests and Node fetch . If your script sets a browser User-Agent, delete that header first. \n If the 403 continues\
          \ after that, slow down and cache what you fetch. ESPN publishes no rate limit, so there is no safe number to aim for. \n 400 Bad Request\
          \ \n No valid event ID: summary needs ?event= with an id from a scoreboard response \n A date range: ?dates=20250601-20250630 fails.\
          \ Use on"
  /apis/site/v2/sports/football/nfl/scoreboard:
    get:
      operationId: get_apis_site_v2_sports_football_nfl_scoreboard
      tags:
      - Apis
      summary: GET /apis/site/v2/sports/football/nfl/scoreboard
      x-source: https://sportsapis.dev/espn-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl 'https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard' \n Get NBA Game Summary \n JavaScript \n Copy"
  /betbuilder/price:
    post:
      operationId: post_betbuilder_price
      tags:
      - Betbuilder
      summary: POST /betbuilder/price returns bet365's own correlated Bet Builder price
      description: Accepts up to 50 bet slips and returns the correlated Bet Builder price for each.
      x-source: https://sportsapis.dev/apis/moviodds
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostBetbuilderPriceRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostBetbuilderPriceResponse'
      x-evidence:
        kind: documentation
  /live-odds:
    get:
      operationId: get_live_odds
      tags:
      - Live Odds
      summary: GET /live-odds
      x-source: https://sportsapis.dev/live-sports-odds-api
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: javascript
        snippet: fetch('https://api.example.com/live-odds')
  /nfl/picks:
    get:
      operationId: get_nfl_picks
      tags:
      - Nfl
      summary: GET /nfl/picks
      x-source: https://sportsapis.dev/apis/bet-better
      parameters:
      - name: format
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl \"https://betbetter.world/nfl/picks?format=json\" \n Every pick carries the fixture, the UTC start time, the market, the\
          \ selection, the line where there is one, the model's probability as a percentage, a fairOdds figure in decimal format, a confidence\
          \ label ( HIGH , LEAN or LONG-SHOT ) and a dated verdict sentence. The envelope repeats the licence, the attribution string and an updatedUtc\
          \ timest"
  /odds:
    get:
      operationId: get_odds
      tags:
      - Odds
      summary: GET /odds
      x-source: https://sportsapis.dev/apis/moviodds
      parameters:
      - name: sport
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl https://moviodds.com/odds?sport=american_football</code> and you have the whole NFL and college board in one response.\
          \ \n Try MoviOdds free \n Compare All Sports APIs \n Are You the Team Behind MoviOdds? \n Show developers you're independently listed\
          \ on SportsAPIs.dev. Copy this badge onto your site. It links straight back to this profile. \n Each of these works best on a reviews\
          \ or \"As cited on S"
  /results/{sport}:
    get:
      operationId: get_results_sport
      tags:
      - Results
      summary: RapidOddsAPI Review 2026
      x-source: https://sportsapis.dev/apis/rapidoddsapi
      parameters:
      - name: sport
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /sports/{sportId}/markets:
    get:
      operationId: get_sports_sportId_markets
      tags:
      - Sports
      summary: RapidOddsAPI Review 2026
      x-source: https://sportsapis.dev/apis/rapidoddsapi
      parameters:
      - name: sportId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/data/{filename}:
    get:
      operationId: get_v1_data_filename
      tags:
      - Data
      summary: 'GET /v1/data/{filename} returns one file inside an envelope with four keys: company, file, updated_at and data.'
      description: Returns one file inside an envelope with four keys.
      x-source: https://sportsapis.dev/apis/arbplay
      parameters:
      - name: filename
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1DataFilenameResponse'
      x-evidence:
        kind: documentation
  /v1/estimate:
    post:
      operationId: post_v1_estimate
      tags:
      - Estimate
      summary: Free POST /v1/estimate endpoint to plan a query and price it
      x-source: https://sportsapis.dev/apis/lumify
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/files:
    get:
      operationId: get_v1_files
      tags:
      - Files
      summary: GET /v1/files lists the files your key can read.
      description: Lists the files your key can read.
      x-source: https://sportsapis.dev/apis/arbplay
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/odds:
    get:
      operationId: get_v1_odds
      tags:
      - Odds
      summary: GET /v1/odds
      x-source: https://sportsapis.dev/apis/oddsengine
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -H \"X-API-Key: YOUR_KEY\"  \"https://api.oddsengine.dev/v1/odds?event_id=...\" \n Responses include a meta.response_ms\
          \ field so you can verify latency claims against your own measurements. That is a nice touch for a product that leads with speed. \n\
          \ The Advanced plan adds WebSocket streaming for live odds updates, but since the site says \"pre-match only\" for markets and our directory\
          \ marks live od"
  /v1/sports/{sport}/events/{id}/sgp:
    post:
      operationId: post_v1_sports_sport_events_id_sgp
      tags:
      - Sports
      summary: Same-game parlay pricing arrived in September 2026.
      description: Takes 2 to 10 legs from one game and returns the book's own correlated price for that slip, alongside the independent product
        of the single‑leg prices and the implied correlation factor.
      x-source: https://sportsapis.dev/apis/propline
      parameters:
      - name: sport
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1SportsSportEventsIdSgpRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v2/odds/event/{id}:
    get:
      operationId: get_v2_odds_event_id
      tags:
      - Odds
      summary: GET /v2/odds/event/{id} returns the raw prices for one event.
      description: Returns raw price data for a single event identified by its id.
      x-source: https://sportsapis.dev/apis/oddsrelay
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v2/odds/{type}:
    get:
      operationId: get_v2_odds_type
      tags:
      - Odds
      summary: 'GET /v2/odds/{type} returns one matched product: standard, 2up, dutching, each-way, extra-place or bog.'
      description: Returns one matched product with events, markets, outcomes and best back and lay prices.
      x-source: https://sportsapis.dev/apis/oddsrelay
      parameters:
      - name: type
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /{sport}/gaps:
    get:
      operationId: get_sport_gaps
      tags:
      - Gaps
      summary: GET /{sport}/gaps returns the same prop at different DFS lines, with the gap already calculated.
      description: Returns the same prop at different DFS lines, with the gap already calculated.
      x-source: https://sportsapis.dev/apis/kashrock
      parameters:
      - name: sport
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /{sport}/lines:
    get:
      operationId: get_sport_lines
      tags:
      - Lines
      summary: GET /{sport}/lines removes the vig from Thunderpick, Kalshi and Polymarket and returns one fair probability.
      description: Removes the vig from Thunderpick, Kalshi and Polymarket and returns one fair probability.
      x-source: https://sportsapis.dev/apis/kashrock
      parameters:
      - name: sport
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
components:
  schemas:
    PostBetbuilderPriceRequest:
      type: object
      properties:
        slips:
          type: array
          description: Up to 50 bet slips, each containing 2 to 12 legs
      required:
      - slips
    PostBetbuilderPriceResponse:
      type: object
      properties:
        prices:
          type: array
          description: Bet365 correlated Bet Builder price for each slip, alongside the naive product of the singles for comparison
    GetV1DataFilenameResponse:
      type: object
      properties:
        company:
          type: string
          description: The bookmaker company.
        file:
          type: string
          description: The file name.
        updated_at:
          type: string
          description: Timestamp of the last update.
        data:
          type: object
          description: The raw bookmaker JSON data.
    PostV1SportsSportEventsIdSgpRequest:
      type: object
      properties:
        legs:
          type: array
          description: Array of 2 to 10 leg objects from the same game. Legs use the same names as the odds endpoint.
      required:
      - legs
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
security:
- apiKey: []
tags:
- name: Api
- name: Apis
- name: Betbuilder
- name: Data
- name: Estimate
- name: Files
- name: Gaps
- name: Lines
- name: Live Odds
- name: Nfl
- name: Odds
- name: Results
- name: Sports