{
  "openapi": "3.0.1",
  "info": {
    "title": "Sportsbook Odds Comparison: Pinnacle, FanDuel and DraftKings",
    "description": "Live comparison of Pinnacle, FanDuel and DraftKings: for every match and market see each book's price, the best price and who offers it, the average, each book's margin and whether the best prices create an arbitrage. Fetches fresh odds automatically - no manual setup.",
    "version": "1.0",
    "x-build-id": "VIL5uoL9mkP1lqiiP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mrdoe~us-sportsbook-odds-comparison/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mrdoe-us-sportsbook-odds-comparison",
        "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/mrdoe~us-sportsbook-odds-comparison/runs": {
      "post": {
        "operationId": "runs-sync-mrdoe-us-sportsbook-odds-comparison",
        "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/mrdoe~us-sportsbook-odds-comparison/run-sync": {
      "post": {
        "operationId": "run-sync-mrdoe-us-sportsbook-odds-comparison",
        "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": {
          "fetchLiveOdds": {
            "title": "Fetch live odds now",
            "type": "boolean",
            "description": "Runs this repo's own Pinnacle, FanDuel and DraftKings Actors right now and compares their fresh odds, in addition to any datasets below. Each is a separate Actor run on your account, billed and timed as its own run. Turn off to only use the datasets below.",
            "default": true
          },
          "liveBookmakers": {
            "title": "Bookmakers to fetch live (optional)",
            "type": "array",
            "description": "Which of pinnacle, fanduel, draftkings to fetch. Leave empty for all three.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "liveSports": {
            "title": "Sports to fetch live (optional)",
            "type": "array",
            "description": "Sport/league to pass to each bookmaker Actor, e.g. NBA, NFL, MLB, NHL. Leave empty for NBA.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "liveMaxMatchesPerBook": {
            "title": "Max matches per bookmaker",
            "minimum": 1,
            "type": "integer",
            "description": "Caps how many matches each bookmaker Actor fetches live.",
            "default": 20
          },
          "oddsDataset1": {
            "title": "Odds dataset 1 (optional)",
            "type": "string",
            "description": "Dataset from a bookmaker odds Actor run (Pinnacle, FanDuel or DraftKings). Add one per bookmaker, on top of or instead of live fetch. Leave all empty to rely on live fetch."
          },
          "oddsDataset2": {
            "title": "Odds dataset 2 (optional)",
            "type": "string",
            "description": "Another dataset of the same kind."
          },
          "oddsDataset3": {
            "title": "Odds dataset 3 (optional)",
            "type": "string",
            "description": "Another dataset of the same kind."
          },
          "oddsDataset4": {
            "title": "Odds dataset 4 (optional)",
            "type": "string",
            "description": "Another dataset of the same kind."
          },
          "markets": {
            "title": "Markets (optional)",
            "type": "array",
            "description": "moneyline and/or total. Leave empty for both.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minBooks": {
            "title": "Minimum bookmakers",
            "minimum": 2,
            "type": "integer",
            "description": "Only compare markets priced by at least this many bookmakers.",
            "default": 2
          },
          "onlyArbitrage": {
            "title": "Only arbitrage",
            "type": "boolean",
            "description": "Return only markets where the best prices across books guarantee a profit.",
            "default": false
          },
          "maxStartDiffHours": {
            "title": "Max start-time difference (hours)",
            "minimum": 0.5,
            "type": "number",
            "description": "Listings count as the same match when their start times are within this many hours.",
            "default": 3
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of comparisons returned. Default is 5 for a quick test; set 0 to return everything available.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}