{
  "openapi": "3.0.1",
  "info": {
    "title": "Agent Commerce Watch [$1/1K💰] | Price & Stock Monitor",
    "description": "Monitor Shopify, WooCommerce and JSON-LD store prices and stock, and get typed change events (price drops, restocks, sell-outs) via an MCP server for AI agents.",
    "version": "1.0",
    "x-build-id": "1uDdnlbgbsKUDcHdn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ahmed_jasarevic~agent-commerce-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-agent-commerce-watch",
        "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/ahmed_jasarevic~agent-commerce-watch/runs": {
      "post": {
        "operationId": "runs-sync-ahmed_jasarevic-agent-commerce-watch",
        "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/ahmed_jasarevic~agent-commerce-watch/run-sync": {
      "post": {
        "operationId": "run-sync-ahmed_jasarevic-agent-commerce-watch",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "scan",
              "monitor"
            ],
            "type": "string",
            "description": "scan = return the current catalog. monitor = re-check the same stores, compare against the previous run and emit only changes (plus an optional webhook). In monitor mode with no stores set, the watchlist registered through the MCP watch_store tool is used.",
            "default": "scan"
          },
          "stores": {
            "title": "Stores (batch)",
            "type": "array",
            "description": "Store domains or URLs, e.g. allbirds.com or https://www.allbirds.com. Shopify and WooCommerce are detected automatically; other stores fall back to sitemap + Product JSON-LD.",
            "items": {
              "type": "string"
            }
          },
          "store": {
            "title": "Store",
            "type": "string",
            "description": "A single store domain or URL. Used when stores is empty."
          },
          "urls": {
            "title": "Product URLs (batch)",
            "type": "array",
            "description": "Scan these exact product pages instead of whole stores. Works for any store and is the fastest way to check a handful of products.",
            "items": {
              "type": "string"
            }
          },
          "maxProductsPerStore": {
            "title": "Max products per store",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on products returned per store. Shopify and WooCommerce use bulk endpoints and handle thousands of products cheaply. Generic sitemap scans fetch one page per product, so keep this low (25-100).",
            "default": 100
          },
          "includeVariants": {
            "title": "Include variants",
            "type": "boolean",
            "description": "Include variant-level price and stock. Shopify variants are free (already in the catalog response). WooCommerce variants require extra requests and are fetched only for the first 50 variable products per scan.",
            "default": true
          },
          "platform": {
            "title": "Store platform",
            "enum": [
              "auto",
              "shopify",
              "woocommerce",
              "generic"
            ],
            "type": "string",
            "description": "Auto-detect probes Shopify and WooCommerce endpoints and caches the result per store. Force a platform if detection is blocked.",
            "default": "auto"
          },
          "onlyChanges": {
            "title": "Monitor: only changes",
            "type": "boolean",
            "description": "monitor mode only — push a row only when something changed. Disable to also push a current snapshot of every product.",
            "default": true
          },
          "emitFirstSeen": {
            "title": "Monitor: emit first seen",
            "type": "boolean",
            "description": "monitor mode only — on the very first check, emit a first_seen event for every product instead of silently creating a baseline. Keep this off for large catalogs.",
            "default": false
          },
          "webhookUrl": {
            "title": "Monitor: webhook URL",
            "type": "string",
            "description": "monitor mode only — POST one JSON payload per store containing the detected change events (price drops, rises, stock changes, new and removed products)."
          },
          "requestDelayMs": {
            "title": "Delay between product pages (ms)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Only used for generic sitemap scans and product-by-URL requests. Adds a polite delay between page fetches.",
            "default": 150
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy is off by default. When enabled, it is used only as a fallback after a direct request fails, so stores that allow direct access stay fast. Residential proxies are required for strict anti-bot stores such as Gymshark."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}