{
  "openapi": "3.0.1",
  "info": {
    "title": "Polymarket & Kalshi Odds vs Pinnacle Fair Probability (MCP)",
    "description": "Sports odds API and MCP server for AI agents. Get the Pinnacle no-vig fair probability for any game, live Polymarket and Kalshi prices, and the true edge after fees at your size. NFL, NBA, NHL, MLB, college football, EPL, Champions League, La Liga, ATP/WTA tennis and more. Pay per call.",
    "version": "0.2",
    "x-build-id": "aNOUY8yYvjCCHK14o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sharplinelabs~polymarket-kalshi-odds-mcp/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sharplinelabs-polymarket-kalshi-odds-mcp",
        "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/sharplinelabs~polymarket-kalshi-odds-mcp/runs": {
      "post": {
        "operationId": "runs-sync-sharplinelabs-polymarket-kalshi-odds-mcp",
        "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/sharplinelabs~polymarket-kalshi-odds-mcp/run-sync": {
      "post": {
        "operationId": "run-sync-sharplinelabs-polymarket-kalshi-odds-mcp",
        "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",
        "required": [
          "league"
        ],
        "properties": {
          "tool": {
            "title": "Tool",
            "enum": [
              "fair_probability",
              "compare_venues",
              "scan_mispricings",
              "resolution_check"
            ],
            "type": "string",
            "description": "Scan a whole league: every upcoming game, every venue price vs the Pinnacle fair price, best edge first. Fair probability: one game's no-vig price vs Polymarket/Kalshi. Compare venues: order-book fill, fees and edge at your size. How each venue settles: resolution rules.",
            "default": "fair_probability"
          },
          "league": {
            "title": "League",
            "enum": [
              "epl",
              "ucl",
              "uel",
              "laliga",
              "seriea",
              "bundesliga",
              "ligue1",
              "championship",
              "mls",
              "ligamx",
              "brasileirao",
              "saudipl",
              "nfl",
              "ncaaf",
              "nba",
              "nhl",
              "mlb",
              "atp",
              "wta",
              "ufc",
              "boxing"
            ],
            "type": "string",
            "description": "Sport and competition. Only games listed on Pinnacle and on Polymarket or Kalshi are compared.",
            "default": "epl"
          },
          "team": {
            "title": "Team",
            "type": "string",
            "description": "One team or player in the game, any common spelling ('Arsenal', 'Man Utd', 'Heat', 'Sinner'). Required for single-game tools; ignored by the league scan."
          },
          "market": {
            "title": "Market",
            "enum": [
              "winner",
              "total",
              "spread",
              "team_total",
              "first_half_winner",
              "first_half_total",
              "first_half_spread",
              "btts",
              "set_winner",
              "total_games",
              "spread_games",
              "all"
            ],
            "type": "string",
            "description": "Which bet to price. The label shows the sports it exists for. 'All markets' works only with the league scan.",
            "default": "winner"
          },
          "line": {
            "title": "Line",
            "type": "string",
            "description": "Optional. Total line (2.5) or spread from the queried team's view (-1.5). Empty = Pinnacle's main line."
          },
          "setNumber": {
            "title": "Set number",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Tennis set_winner only. Default 1."
          },
          "date": {
            "title": "Game date",
            "type": "string",
            "description": "Optional. Pick a day (UTC), or a relative day like 'today', '+1 day'. Single-game tools: the team's game on that day (default: next game). League scan: only games on that day (default: all upcoming)."
          },
          "sortBy": {
            "title": "Sort scan by",
            "enum": [
              "edge",
              "kickoff"
            ],
            "type": "string",
            "description": "League scan only. Biggest edge first, or by kickoff time (games grouped together).",
            "default": "edge"
          },
          "sizeUsd": {
            "title": "Trade size (USD)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "compare_venues only: dollars to fill against each order book.",
            "default": 100
          },
          "minEdgePercent": {
            "title": "Minimum edge (%)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Optional edge threshold in probability points (2 = 2%). Default 0: every price at or above fair is flagged. The scan always lists every price either way.",
            "default": 0
          },
          "devigMethod": {
            "title": "De-vig method",
            "enum": [
              "shin",
              "multiplicative",
              "power",
              "none"
            ],
            "type": "string",
            "description": "How Pinnacle's margin is removed. Shin (default): most accurate, removes more margin from longshots and draws. Multiplicative: proportional. Power: harshest on longshots. None: raw Pinnacle prices with the margin left in, which inflates fair prices (most lenient, for comparison only).",
            "default": "shin"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}