{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Betting Odds API — Pinnacle, DraftKings & Arbitrage",
    "description": "Moneyline, spread and total odds per book — Pinnacle sharp lines with the risk limit it accepts, DraftKings, Kalshi — plus arbitrage and value bets calculated across books, opening lines, props and futures. NFL, NBA, MLB, NHL, college, soccer, UFC, tennis. No API key.",
    "version": "0.1",
    "x-build-id": "vuxqWILJyqGvI8v6n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~sports-odds-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-sports-odds-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/lergassy~sports-odds-api/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-sports-odds-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/lergassy~sports-odds-api/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-sports-odds-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "🧭 What to get",
            "enum": [
              "odds",
              "props",
              "futures",
              "prediction-markets",
              "leagues"
            ],
            "type": "string",
            "description": "<b>Odds</b> — moneyline, spread and total for every game, per book, with opening lines and movement. <b>Props</b> — player and game props from DraftKings for every game. <b>Futures</b> — championship, division, award and season-win markets. <b>Prediction markets</b> — Kalshi game contracts with traded probabilities. <b>Leagues</b> — every league DraftKings currently prices, with ids.",
            "default": "odds"
          },
          "leagues": {
            "title": "🏆 Leagues",
            "type": "array",
            "description": "One or more leagues. Odds, props and Kalshi contracts are matched game by game. You can also type any ESPN league path such as <code>soccer/eng.2</code> for the game list (DraftKings and Kalshi prices then depend on whether they carry that league).",
            "items": {
              "type": "string",
              "enum": [
                "nfl",
                "ncaaf",
                "nba",
                "wnba",
                "ncaam",
                "ncaaw",
                "mlb",
                "nhl",
                "epl",
                "laliga",
                "bundesliga",
                "seriea",
                "ligue1",
                "ucl",
                "uel",
                "mls",
                "ligamx",
                "eredivisie",
                "brasileirao",
                "worldcup",
                "facup",
                "atp",
                "wta",
                "ufc",
                "pfl",
                "f1",
                "nascar",
                "indycar"
              ],
              "enumTitles": [
                "NFL",
                "NCAA football",
                "NBA",
                "WNBA",
                "NCAA men's basketball",
                "NCAA women's basketball",
                "MLB",
                "NHL",
                "Premier League",
                "La Liga",
                "Bundesliga",
                "Serie A",
                "Ligue 1",
                "Champions League",
                "Europa League",
                "MLS",
                "Liga MX",
                "Eredivisie",
                "Brasileirão",
                "FIFA World Cup",
                "FA Cup",
                "ATP tennis",
                "WTA tennis",
                "UFC",
                "PFL",
                "Formula 1",
                "NASCAR",
                "IndyCar"
              ]
            }
          },
          "daysAhead": {
            "title": "📅 Days ahead",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "Games from today up to this many days ahead (ignored when dates are set below). 0 = today only.",
            "default": 7
          },
          "dateFrom": {
            "title": "📅 From date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "<code>YYYY-MM-DD</code>, UTC. Optional."
          },
          "dateTo": {
            "title": "📅 To date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "<code>YYYY-MM-DD</code>, UTC. Optional; at most 60 days after the start."
          },
          "markets": {
            "title": "📊 Markets",
            "type": "array",
            "description": "Odds mode: which game lines to output. Spread is the run line in MLB and the puck line in NHL; soccer moneylines carry a draw price.",
            "items": {
              "type": "string",
              "enum": [
                "moneyline",
                "spread",
                "total"
              ],
              "enumTitles": [
                "Moneyline (winner)",
                "Spread / run line / puck line",
                "Total (over/under)"
              ]
            },
            "default": [
              "moneyline",
              "spread",
              "total"
            ]
          },
          "books": {
            "title": "📚 Sources",
            "type": "array",
            "description": "<b>Pinnacle</b> — the sharp reference book the rest of the market prices against, with the risk limit it will accept on each market. <b>DraftKings</b> — live prices straight from the sportsbook feed. <b>ESPN</b> — every provider ESPN carries for the game (DraftKings, Bet365 where present) with opening lines. <b>Kalshi</b> — regulated prediction market: the traded probability of each side winning, volume and open interest. Two or more sources unlock the arbitrage and value rows below.",
            "items": {
              "type": "string",
              "enum": [
                "draftkings",
                "pinnacle",
                "espn",
                "kalshi"
              ],
              "enumTitles": [
                "DraftKings (direct feed)",
                "Pinnacle (sharp line + risk limits)",
                "ESPN providers with opening lines",
                "Kalshi prediction market"
              ]
            },
            "default": [
              "draftkings",
              "pinnacle",
              "espn",
              "kalshi"
            ]
          },
          "oddsFormat": {
            "title": "🔢 Odds format",
            "enum": [
              "american",
              "decimal",
              "fractional",
              "implied"
            ],
            "type": "string",
            "description": "How the <code>homePrice</code>/<code>awayPrice</code>/<code>overPrice</code>… fields are written. Decimal odds and implied probabilities are always included as separate fields.",
            "default": "american"
          },
          "outputFormat": {
            "title": "🧱 Row layout",
            "enum": [
              "flat",
              "nested"
            ],
            "type": "string",
            "description": "<b>Flat</b> — one row per game × market × book, spreadsheet-friendly. <b>Nested</b> — one row per game with all books inside and the best price per outcome.",
            "default": "flat"
          },
          "includeOpeningLines": {
            "title": "📈 Opening lines and movement",
            "type": "boolean",
            "description": "Fetch the opening line and price for each game (one extra request per game) and compute how far the line and prices have moved.",
            "default": true
          },
          "includeAlternateLines": {
            "title": "➕ Alternate spreads and totals",
            "type": "boolean",
            "description": "Add DraftKings' alternate lines as extra rows (market <code>alternate-spread</code> / <code>alternate-total</code>).",
            "default": false
          },
          "includeFinished": {
            "title": "🏁 Include finished games",
            "type": "boolean",
            "description": "Odds mode: keep games that are already final (closing lines, if a source still carries them). Prediction-markets mode: keep settled contracts.",
            "default": false
          },
          "includeEdges": {
            "title": "💰 Find arbitrage and value bets",
            "type": "boolean",
            "description": "Adds <b>edge</b> rows on top of the prices: <b>arbitrage</b> — the best price on each side, taken from whichever book offers it, when together they guarantee a profit; <b>value</b> — a book paying more than Pinnacle’s vig-free probability says the outcome deserves. Needs at least two sources.",
            "default": true
          },
          "minEdgePercent": {
            "title": "📉 Smallest edge worth reporting, %",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Prices move by a tick constantly, so anything under half a percent is noise a bettor would pay away in the spread. Raise it to see only the big disagreements.",
            "default": 1
          },
          "eventIds": {
            "title": "🎯 Only these games",
            "type": "array",
            "description": "ESPN event ids (the <code>eventId</code> field of any row, or the number in an ESPN game URL). Leave empty for every game in the date range.",
            "items": {
              "type": "string"
            }
          },
          "propCategories": {
            "title": "🧑‍🤝‍🧑 Prop categories",
            "type": "array",
            "description": "Props mode: keep only categories whose name contains one of these, e.g. <code>Passing</code>, <code>TD Scorers</code>, <code>Points</code>, <code>Batter</code>. Empty = every player and game prop category (this can be thousands of rows per game).",
            "items": {
              "type": "string"
            }
          },
          "maxPropsPerGame": {
            "title": "Props per game cap",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many prop rows for one game.",
            "default": 500
          },
          "futuresCategories": {
            "title": "🏆 Futures categories",
            "type": "array",
            "description": "Futures mode: keep only categories whose name contains one of these, e.g. <code>Futures</code>, <code>Awards</code>, <code>Wins</code>, <code>Playoffs</code>. Empty = every futures-type category.",
            "items": {
              "type": "string"
            }
          },
          "kalshiSeries": {
            "title": "🎲 Kalshi series tickers",
            "type": "array",
            "description": "Prediction-markets mode: series tickers to pull directly, e.g. <code>KXNFLGAME</code>, <code>KXUCLGAME</code>, <code>KXATPMATCH</code>. Leagues selected above are added automatically.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "💯 Maximum rows",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Stop after this many rows in the run.",
            "default": 5000
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many requests run at once.",
            "default": 6
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: every source answers Apify's own servers directly. Set only if a source starts refusing.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}