{
  "openapi": "3.0.1",
  "info": {
    "title": "Kalshi Sports Betting Odds – NFL, NBA, MLB & NHL Lines",
    "description": "One row per game from Kalshi, the CFTC-regulated exchange: both teams' prices, vig-free probabilities, overround, volume, spreads, totals and price history. NFL, NBA, MLB, NHL, EPL, UCL and more.",
    "version": "0.3",
    "x-build-id": "Q9hlTbIshNLGQuHdS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowfeed~kalshi-sports-odds-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowfeed-kalshi-sports-odds-scraper",
        "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/rowfeed~kalshi-sports-odds-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rowfeed-kalshi-sports-odds-scraper",
        "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/rowfeed~kalshi-sports-odds-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rowfeed-kalshi-sports-odds-scraper",
        "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": {
          "leagues": {
            "title": "Leagues",
            "type": "array",
            "description": "Leagues to scrape, one row per game. Defaults to the seven most-traded leagues. Leaves with no open games simply contribute zero rows, not an error.",
            "items": {
              "type": "string",
              "enum": [
                "NFL",
                "NBA",
                "MLB",
                "NHL",
                "EPL",
                "NCAAF",
                "NCAAB",
                "UCL",
                "LALIGA",
                "SERIEA",
                "BUNDESLIGA",
                "LIGUE1",
                "MLS",
                "WNBA",
                "ATP",
                "WTA",
                "UFC"
              ]
            },
            "default": [
              "NFL",
              "NBA",
              "MLB",
              "NHL",
              "EPL",
              "NCAAF",
              "UCL"
            ]
          },
          "seriesTickers": {
            "title": "Extra series tickers (advanced)",
            "type": "array",
            "description": "Extra Kalshi game series to scrape by ticker, e.g. KXWNBAGAME, for leagues not in the list above. Spread/total series are looked up by replacing GAME with SPREAD/TOTAL.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "eventTickers": {
            "title": "Specific event tickers (per-game polling)",
            "type": "array",
            "description": "Fetch exactly these game events, e.g. KXNFLGAME-26SEP24ATLGB. Useful for polling one game repeatedly. An unknown ticker becomes an error row instead of failing the run. When this is set (and seriesTickers is empty) only these games are fetched; the leagues sweep is skipped so per-game polling costs one row per game.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "team": {
            "title": "Team filter",
            "type": "string",
            "description": "Case-insensitive substring match against the game title and both team names, e.g. \"Green Bay\" or \"GB\".",
            "default": ""
          },
          "status": {
            "title": "Game status",
            "enum": [
              "open",
              "closed",
              "settled",
              "all"
            ],
            "type": "string",
            "description": "Which games to return: open (trading now), closed (trading ended, not yet settled), settled (final result known), or all.",
            "default": "open"
          },
          "includeSpreadsTotals": {
            "title": "Include spreads & totals",
            "type": "boolean",
            "description": "Join each game's point-spread and total-points/goals markets onto its row as `spreads`/`totals` lists. Off returns moneyline only, one fewer request pair per league.",
            "default": true
          },
          "includeHistory": {
            "title": "Include price history",
            "type": "boolean",
            "description": "Fetch the last 7 days of hourly candlesticks for each game's two moneyline markets. Adds one `history` event ($2 per 1,000) per game where at least one candlestick series was fetched.",
            "default": false
          },
          "maxGames": {
            "title": "Max games",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Keep this many game rows after filtering: soonest-expiring first, or most recent first for settled and closed games. Each row is one `game` event ($1 per 1,000).",
            "default": 100
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}