{
  "openapi": "3.0.1",
  "info": {
    "title": "Polymarket Alpha Signals: Odds Moves Live",
    "description": "Track Polymarket odds in real time and get only the markets that actually moved. Pay per signal, not per row. A quiet run costs you nothing.",
    "version": "1.0",
    "x-build-id": "4kqC4PnZItw0TA9T3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dmitrii_shifo~polymarket-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dmitrii_shifo-polymarket-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/dmitrii_shifo~polymarket-monitor/runs": {
      "post": {
        "operationId": "runs-sync-dmitrii_shifo-polymarket-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/dmitrii_shifo~polymarket-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-dmitrii_shifo-polymarket-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": "Search queries",
            "type": "array",
            "description": "Keep only markets whose question text contains at least one of these words. Leave empty to check all markets that pass the other filters. Only used during a general market scan.",
            "items": {
              "type": "string"
            }
          },
          "slugs": {
            "title": "Market slugs",
            "type": "array",
            "description": "Watch specific markets by slug instead of scanning all markets. When this is filled in, the general market scan is skipped and only these markets are checked.",
            "items": {
              "type": "string"
            }
          },
          "conditionIds": {
            "title": "Condition IDs",
            "type": "array",
            "description": "Watch specific markets by condition ID instead of scanning all markets. Works the same way as market slugs, and can be combined with them.",
            "items": {
              "type": "string"
            }
          },
          "includeTags": {
            "title": "Include tags",
            "type": "array",
            "description": "Keep only events tagged with at least one of these tag slugs, for example politics or crypto. Leave empty to skip this filter. Only used during a general market scan.",
            "items": {
              "type": "string"
            }
          },
          "excludeTags": {
            "title": "Exclude tags",
            "type": "array",
            "description": "Drop events tagged with any of these tag slugs. Only used during a general market scan.",
            "items": {
              "type": "string"
            }
          },
          "minLiquidity": {
            "title": "Minimum liquidity",
            "type": "integer",
            "description": "Skip markets with liquidity below this value, in dollars. Not applied when watching specific markets by slug or condition ID.",
            "default": 1000
          },
          "minVolume24h": {
            "title": "Minimum 24 hour volume",
            "type": "integer",
            "description": "Skip markets with traded volume in the last 24 hours below this value, in dollars. Not applied when watching specific markets by slug or condition ID.",
            "default": 5000
          },
          "windowMinutes": {
            "title": "Comparison window, minutes",
            "minimum": 5,
            "maximum": 1440,
            "type": "integer",
            "description": "How far back to compare price and volume against. Set this close to how often you schedule the actor to run. Above 180 minutes, if there is no usable history point yet, price move signals fall back to Polymarket's own 24 hour price change figure; volume spike signals have no such fallback and simply will not fire until enough history has accumulated.",
            "default": 60
          },
          "minPriceMovePoints": {
            "title": "Minimum price move, points",
            "type": "number",
            "description": "Minimum absolute price change, on Polymarket's 0 to 1 price scale, needed to trigger a price move signal.",
            "default": 0.03
          },
          "minPriceMovePct": {
            "title": "Minimum price move, percent",
            "type": "number",
            "description": "Minimum relative price change, in percent of the starting price, needed to trigger a price move signal. Both this and the points threshold must be met.",
            "default": 15
          },
          "minVolumeSpikePct": {
            "title": "Minimum volume spike, percent",
            "type": "number",
            "description": "Minimum relative growth of 24 hour volume, in percent, needed to trigger a volume spike signal.",
            "default": 25
          },
          "minVolumeSpikeAbs": {
            "title": "Minimum volume spike, dollars",
            "type": "integer",
            "description": "Minimum growth of 24 hour volume in dollars, needed to trigger a volume spike signal. Both this and the percent threshold must be met.",
            "default": 5000
          },
          "minPriceForSignal": {
            "title": "Minimum price for a signal",
            "type": "number",
            "description": "Suppress a price move or volume spike signal if price_now or price_then falls outside [this value, 1 minus this value] on Polymarket's 0 to 1 price scale. Either price alone is enough to suppress the signal; both do not need to be outside the range. Does not apply to new market signals.",
            "default": 0.05
          },
          "repeatSuppressMinutes": {
            "title": "Repeat signal suppression, minutes",
            "type": "integer",
            "description": "After a signal on a market, wait this many minutes before signaling on it again, unless the price moves further in that time.",
            "default": 30
          },
          "newMarketMaxAgeHours": {
            "title": "New market max age, hours",
            "type": "integer",
            "description": "Only signal a market as new if it was created less than this many hours ago.",
            "default": 24
          },
          "newMarketMinLiquidity": {
            "title": "New market minimum liquidity",
            "type": "integer",
            "description": "Minimum liquidity, in dollars, for the dedicated new market scan. Used instead of Minimum liquidity and Minimum 24 hour volume for that scan, since a market fresh off creation rarely clears those yet.",
            "default": 100
          },
          "maxMarkets": {
            "title": "Max markets per run",
            "maximum": 2000,
            "type": "integer",
            "description": "Maximum number of markets to check in one run. In a general scan, markets are taken in order of highest 24 hour volume first, up to this limit. When new market alerts are on, the dedicated new market scan reserves room within this same limit rather than adding to it. Not applied when watching specific markets by slug or condition ID.",
            "default": 300
          },
          "maxSignalsPerEvent": {
            "title": "Max signals per event",
            "type": "integer",
            "description": "Maximum number of signals to keep from one real-world event in a run, the strongest first. When Polymarket splits one match into several events that share the same underlying game (for example a main line and a halftime result), they are grouped and capped together. Keeps one busy event from filling up the whole result list.",
            "default": 2
          },
          "maxSignalsPerRun": {
            "title": "Max signals per run",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on how many signals a single run can emit and charge for. Signals are ranked by strength before the cap is applied, so you always get the strongest ones first, regardless of signal type. Raise it if you want full coverage, lower it to keep the cost of every run predictable.",
            "default": 5
          },
          "signalTypes": {
            "title": "Signal types",
            "type": "array",
            "description": "Which kinds of signals to look for. New market alerts are off by default. In a broad scan they mostly surface sports sub-markets that have no trading yet. Turn them on together with a watchlist or a tag filter, where they tell you about markets you actually care about.",
            "items": {
              "type": "string",
              "enum": [
                "price_move",
                "volume_spike",
                "new_market"
              ],
              "enumTitles": [
                "Price move",
                "Volume spike",
                "New market"
              ]
            },
            "default": [
              "price_move",
              "volume_spike"
            ]
          },
          "includeAutoGeneratedMarkets": {
            "title": "Include auto-generated recurring markets",
            "type": "boolean",
            "description": "Polymarket creates short-lived recurring markets, such as five-minute crypto up or down contracts, around the clock. They are excluded by default because they produce a constant stream of low-value signals. Applies to the general scan and the dedicated new market scan; not applied when watching specific markets by slug or condition ID.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "maxLength": 40,
            "type": "string",
            "description": "Runs that share a state key share price history. Leave empty unless you run several separate monitors and want to keep their histories apart. Only letters, digits and hyphens are kept; anything else is dropped.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}