{
  "openapi": "3.0.1",
  "info": {
    "title": "Polymarket Market Monitor + Whale & Arbitrage Signals",
    "description": "Turn Polymarket into a trading-signal feed: watchlist any market by slug, track price and volume changes between runs, whale flow, top holders, price history, orderbook depth, and Kalshi arbitrage spreads. Category, keyword and volume filters. JSON or CSV. First 5 results per run free",
    "version": "0.0",
    "x-build-id": "n5Twqsz6EH6LmvOPo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~polymarket-market-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-polymarket-market-monitor",
        "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/memo23~polymarket-market-monitor/runs": {
      "post": {
        "operationId": "runs-sync-memo23-polymarket-market-monitor",
        "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/memo23~polymarket-market-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-polymarket-market-monitor",
        "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": {
          "searchQueries": {
            "title": "Keyword search (question or description)",
            "type": "array",
            "description": "Only keep markets whose question or description contains any of these keywords. Case insensitive. Leave empty to keep everything the API returned.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Category shortcuts",
            "type": "array",
            "description": "Top-level Polymarket categories. Pick one or more of: sports, politics, crypto, technology, science, business, finance, elections, entertainment, economy, world. Leave empty to track all categories.",
            "items": {
              "type": "string"
            }
          },
          "tagIds": {
            "title": "Tag IDs (advanced)",
            "type": "array",
            "description": "Raw Polymarket Gamma tag IDs for tags outside the category shortcuts — add one ID per entry, e.g. 144 (Elections) or 180 (Israel). Find a tag's ID by opening gamma-api.polymarket.com/tags/slug/<tag-name> in your browser. Combined with the category shortcuts above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "marketSlugs": {
            "title": "Watchlist: market slugs",
            "type": "array",
            "description": "Track specific markets by their URL slug — the last path segment of a polymarket.com market URL, e.g. 'will-bitcoin-reach-80000-in-july'. Watchlist markets are always included, bypassing the keyword/volume/liquidity filters below. Combined with any categories or keywords you also set. Used when itemType is 'markets'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "eventSlugs": {
            "title": "Watchlist: event slugs",
            "type": "array",
            "description": "Track specific event groups by their URL slug — from polymarket.com/event/<slug>, e.g. 'world-cup-winner'. In 'events' mode each slug becomes one row; in 'markets' mode every market inside the event is tracked. Watchlist events bypass the filters below.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "itemType": {
            "title": "Item type",
            "enum": [
              "markets",
              "events"
            ],
            "type": "string",
            "description": "'markets' returns one row per individual market (question + outcomes + prices). 'events' returns one row per event group (a basket of related markets, e.g. 'World Cup Winner') with a nested markets summary.",
            "default": "markets"
          },
          "status": {
            "title": "Status",
            "enum": [
              "active",
              "closed",
              "all"
            ],
            "type": "string",
            "description": "'active' (default) returns open markets. 'closed' returns resolved markets. 'all' returns both.",
            "default": "active"
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "volume24hr",
              "liquidity",
              "endDate",
              "startDate",
              "newest"
            ],
            "type": "string",
            "description": "Sort markets before filtering and capping. 'volume24hr' ranks by last-24h traded volume, 'liquidity' by resting orderbook depth, 'endDate' by closest to resolution, 'startDate' / 'newest' by recency.",
            "default": "volume24hr"
          },
          "minVolume24h": {
            "title": "Minimum 24h volume (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop markets with less than this much traded volume in the last 24 hours. Useful when you only want liquid, actively traded markets. 0 disables.",
            "default": 0
          },
          "minLiquidity": {
            "title": "Minimum liquidity (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop markets with less than this much resting liquidity on the orderbook. Filters thin books. 0 disables.",
            "default": 0
          },
          "minTotalVolume": {
            "title": "Minimum lifetime volume (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop markets with less than this much lifetime traded volume. Filters toy markets. 0 disables.",
            "default": 0
          },
          "minPriceChangePct": {
            "title": "Minimum price move (percentage points)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep markets whose 1-week or 1-month price has moved by at least this many percentage points (absolute value). Example: 10 keeps only markets that moved 10+ points. 0 disables.",
            "default": 0
          },
          "minutesUntilEnd": {
            "title": "Minimum minutes until resolution",
            "minimum": 0,
            "type": "integer",
            "description": "Drop markets ending sooner than this many minutes from now, e.g. to exclude markets too close to resolution for your strategy. 0 keeps everything.",
            "default": 0
          },
          "includeWhaleTrades": {
            "title": "Include whale trades",
            "type": "boolean",
            "description": "Enrich each row with large-trade flow: whale trade count, whale buy/sell/net USD flow, and the top 5 largest recent trades (side, outcome, USD value, trader). One extra API sweep per run, not per market.",
            "default": false
          },
          "whaleMinUsd": {
            "title": "Whale trade threshold (USD)",
            "minimum": 500,
            "type": "integer",
            "description": "Minimum cash value of a single trade to count as a whale trade.",
            "default": 10000
          },
          "includeOrderbook": {
            "title": "Include orderbook depth",
            "type": "boolean",
            "description": "Fetch the live CLOB orderbook for each market's YES outcome: best bid/ask, spread, bid/ask depth in USD (top 10 levels), and book imbalance. Adds one request per market.",
            "default": false
          },
          "includePriceHistory": {
            "title": "Include price history",
            "type": "boolean",
            "description": "Attach the market's YES-price time series from the CLOB (up to 400 points, newest last). Adds one request per market. Only for itemType 'markets'.",
            "default": false
          },
          "priceHistoryInterval": {
            "title": "Price history granularity",
            "enum": [
              "daily",
              "6h",
              "1h"
            ],
            "type": "string",
            "description": "'daily' = one point per day over the market's full lifetime. '6h' / '1h' = finer candles covering roughly the last month.",
            "default": "daily"
          },
          "includeTopHolders": {
            "title": "Include top holders",
            "type": "boolean",
            "description": "Attach the largest position holders on each side of the market — wallet, display name, shares, and estimated USD value at current prices. Adds one request per market. Only for itemType 'markets'.",
            "default": false
          },
          "topHoldersCount": {
            "title": "Top holders per side",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many holders to fetch per outcome side.",
            "default": 10
          },
          "kalshiArb": {
            "title": "Kalshi arbitrage matching (experimental)",
            "type": "boolean",
            "description": "Fuzzy-match each Polymarket question against open Kalshi markets and report the Kalshi yes bid/ask, the price spread in points, and an arbSignal flag when the spread exceeds the threshold. Matching is conservative (a missed match beats a false signal) and resolution criteria can differ between platforms — always verify before trading.",
            "default": false
          },
          "kalshiArbMinSpreadPct": {
            "title": "Arb signal threshold (percentage points)",
            "minimum": 1,
            "type": "integer",
            "description": "Flag arbSignal=true when the absolute Polymarket-vs-Kalshi price spread is at least this many percentage points.",
            "default": 5
          },
          "dedupe": {
            "title": "Deduplicate across runs",
            "type": "boolean",
            "description": "Skip market IDs already pushed on previous runs (stored in the key-value store under SEEN_IDS). Leave off to snapshot every run — recommended for monitoring, since price/volume deltas versus the prior run are computed either way.",
            "default": false
          },
          "maxItemsPerSource": {
            "title": "Max items fetched per category/tag",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Per-tag cap on items fetched from the API before filtering. The Gamma API returns up to 100 per page; the actor paginates.",
            "default": 300
          },
          "maxItemsTotal": {
            "title": "Maximum results per run",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Hard cap on rows pushed to the dataset per run. Controls total cost — you are charged per result after the first 5 free rows.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy settings. The Polymarket and Kalshi APIs are public and do not aggressively rate-limit by IP, so a proxy is rarely needed.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}