{
  "openapi": "3.0.1",
  "info": {
    "title": "Sports Odds Movement and Arbitrage Tracker",
    "description": "Track sports betting line movement: every price that moved since your last run, with the prior line, new line and the delta in implied probability points. Moneyline, spread and total for MLB, NFL, NBA, NHL and college. Reads a sportsbook's public feed, so no API key needed.",
    "version": "0.1",
    "x-build-id": "CHIdVfGohOcLFI30d"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapemint~sports-odds-movement-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapemint-sports-odds-movement-tracker",
        "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/scrapemint~sports-odds-movement-tracker/runs": {
      "post": {
        "operationId": "runs-sync-scrapemint-sports-odds-movement-tracker",
        "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/scrapemint~sports-odds-movement-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-scrapemint-sports-odds-movement-tracker",
        "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 watch for line movement. Out of season leagues return no events, which is not an error.",
            "items": {
              "type": "string",
              "enum": [
                "mlb",
                "nfl",
                "ncaaf",
                "nba",
                "ncaab",
                "wnba",
                "nhl"
              ],
              "enumTitles": [
                "MLB (baseball)",
                "NFL (American football)",
                "NCAAF (college football)",
                "NBA (basketball)",
                "NCAAB (college basketball)",
                "WNBA (basketball)",
                "NHL (ice hockey)"
              ]
            },
            "default": [
              "mlb"
            ]
          },
          "books": {
            "title": "Books to watch",
            "type": "array",
            "description": "Which sportsbooks to track for movement. Pinnacle is the sharp book, so a Pinnacle move is the one that usually leads; Bovada is recreational and tends to follow. Each book's lines are tracked separately, so a row tells you which book moved. Pinnacle covers the major leagues only and is skipped where it does not price the league.",
            "items": {
              "type": "string",
              "enum": [
                "bovada",
                "pinnacle"
              ],
              "enumTitles": [
                "Bovada",
                "Pinnacle (sharp)"
              ]
            },
            "default": [
              "bovada",
              "pinnacle"
            ]
          },
          "markets": {
            "title": "Markets",
            "type": "array",
            "description": "Which bet types to watch. Moneyline is the pick to win, spread is the handicap line, total is the over/under.",
            "items": {
              "type": "string",
              "enum": [
                "h2h",
                "spreads",
                "totals"
              ],
              "enumTitles": [
                "Moneyline",
                "Spread",
                "Total (over/under)"
              ]
            },
            "default": [
              "h2h",
              "spreads",
              "totals"
            ]
          },
          "minMoveProbPoints": {
            "title": "Minimum move (implied probability points)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How far a price must move since the previous run before it counts as a move. Measured in implied probability points, not American cents: -110 to -120 and +200 to +190 are both ten cents but are nothing like the same change in belief. 1 is a normal filter, 2 catches only sharp moves, 0 returns any change at all. A line that did not move is never returned and never charged, whatever this is set to. A handicap moving (a spread going -2.5 to -1.5) counts as a move on its own, even when the price is unchanged.",
            "default": 1
          },
          "includeNewLines": {
            "title": "Include lines seen for the first time",
            "type": "boolean",
            "description": "A line has no prior price on the first run that sees it, so there is no movement to report. Off by default, which means the very first run on a league returns nothing and charges nothing while it builds a baseline. Turn on to receive those opening prices too, with priorLine null.",
            "default": false
          },
          "liveOnly": {
            "title": "Live (in play) games only",
            "type": "boolean",
            "description": "Track only games already under way. In play prices move constantly, so pair this with a short schedule interval.",
            "default": false
          },
          "includeSuspended": {
            "title": "Include suspended markets",
            "type": "boolean",
            "description": "A suspended market keeps its last price, so including it can report a frozen quote as if it were a live move. Off by default.",
            "default": false
          },
          "oddsFormat": {
            "title": "Odds format",
            "enum": [
              "american",
              "decimal"
            ],
            "type": "string",
            "description": "Format for the headline price field. Both American and decimal are always included on every row regardless.",
            "default": "american"
          },
          "maxItemsPerLeague": {
            "title": "Max rows per league",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on moved lines returned per league in one run.",
            "default": 200
          },
          "maxItemsTotal": {
            "title": "Max rows total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on moved lines returned per run across all leagues.",
            "default": 400
          },
          "sports": {
            "title": "Sport keys (deprecated)",
            "type": "array",
            "description": "Deprecated, kept so saved inputs keep working. Use the Leagues field instead. Values here are merged into it.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "apiKey": {
            "title": "API key (no longer used)",
            "type": "string",
            "description": "No longer used and safe to leave empty. This actor reads a sportsbook's own public feed, so it needs no key, no account and no third party signup."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}