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 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