{
  "openapi": "3.0.1",
  "info": {
    "title": "Prediction Market Arb Scanner — Polymarket + Kalshi + PredictIt",
    "description": "Scans Polymarket, Kalshi, and PredictIt for matching binary prediction markets and surfaces every cross-platform pair where buying YES on one and NO on the other locks in a risk-free profit. Wider net than a single pair — three platforms means three pairwise comparisons per scan.",
    "version": "1.0",
    "x-build-id": "n0DTExe2KbLqzBHog"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/congism~polymarket-kalshi-predictit-arb-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-congism-polymarket-kalshi-predictit-arb-finder",
        "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/congism~polymarket-kalshi-predictit-arb-finder/runs": {
      "post": {
        "operationId": "runs-sync-congism-polymarket-kalshi-predictit-arb-finder",
        "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/congism~polymarket-kalshi-predictit-arb-finder/run-sync": {
      "post": {
        "operationId": "run-sync-congism-polymarket-kalshi-predictit-arb-finder",
        "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": {
          "minSpread": {
            "title": "Minimum Price Spread",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Minimum YES price difference between platforms to flag as an arb opportunity (0-1 scale). Example: 0.05 means at least 5 cents difference. Default: 0.02.",
            "default": 0.02
          },
          "minReturnPct": {
            "title": "Minimum Return % per Trade",
            "minimum": 0,
            "type": "number",
            "description": "Minimum estimated profit % per dollar risked. Example: 1.0 = only show opportunities worth at least 1% return. Default: 0.5.",
            "default": 0.5
          },
          "maxReturnPct": {
            "title": "Maximum Return % per Trade (sanity cap)",
            "minimum": 1,
            "type": "number",
            "description": "Excludes opportunities claiming an implausibly large guaranteed return, which in practice almost always means the two markets were mismatched (e.g. two different candidates in the same race matched to each other) rather than a real arb. Raise this only if you plan to manually verify every result. Default: 100.",
            "default": 100
          },
          "minSimilarity": {
            "title": "Minimum Market Match Similarity",
            "minimum": 0.05,
            "maximum": 1,
            "type": "number",
            "description": "Keyword similarity threshold (0-1) for matching markets across platforms. Higher = stricter matching, fewer but more accurate pairs. Values below 0.4 frequently produce false matches between unrelated markets that happen to share generic keywords (e.g. year numbers) — these show up as huge fake spreads and sort to the top, so don't lower this without also raising minReturnPct or manually reviewing every result. Default: 0.4.",
            "default": 0.4
          },
          "minLiquidity": {
            "title": "Minimum Liquidity (USDC / USD)",
            "minimum": 0,
            "type": "number",
            "description": "Only include markets with at least this much liquidity. Filters out thin markets where you can't fill a meaningful position. Note: PredictIt's public API does not expose liquidity, so PredictIt markets are exempt from this filter. Default: 0.",
            "default": 0
          },
          "minVolume24h": {
            "title": "Minimum 24h Volume",
            "minimum": 0,
            "type": "number",
            "description": "Only include markets with at least this much 24-hour trading volume. Note: PredictIt's public API does not expose 24h volume, so PredictIt markets are exempt from this filter. Default: 0.",
            "default": 0
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of arb opportunities to return, sorted by return % descending. Default: 500.",
            "default": 500
          },
          "includePredictIt": {
            "title": "Include PredictIt",
            "type": "boolean",
            "description": "PredictIt's market data API is public and needs no credentials. Disable to scan Polymarket/Kalshi only.",
            "default": true
          },
          "kalshiEmail": {
            "title": "Kalshi Account Email",
            "type": "string",
            "description": "Your Kalshi account email. Required to fetch Kalshi market prices. Without this, Kalshi is skipped and only Polymarket/PredictIt pairs are scanned.",
            "default": ""
          },
          "kalshiPassword": {
            "title": "Kalshi Account Password",
            "type": "string",
            "description": "Your Kalshi account password. Stored securely and only used to authenticate with the Kalshi API."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}