{
  "openapi": "3.0.1",
  "info": {
    "title": "Pop Mart Scraper — prices, stock & drop dates",
    "description": "Pop Mart Labubu US catalog prices in USD, stock level (0/1/2, not a unit count) & release date. A separate events dataset records sold out, restock and price changes, with the time range between two checks. Events start on the second run. PPE per product row and per stock-change.",
    "version": "0.7",
    "x-build-id": "Q7izt7tfCdgF61Qe7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/noahadler~popmart-products/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-noahadler-popmart-products",
        "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/noahadler~popmart-products/runs": {
      "post": {
        "operationId": "runs-sync-noahadler-popmart-products",
        "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/noahadler~popmart-products/run-sync": {
      "post": {
        "operationId": "run-sync-noahadler-popmart-products",
        "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": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Series or keywords as typed on popmart.com, e.g. labubu, molly, skullpanda, crybaby, dimoo, hirono. One search per term.",
            "default": [
              "labubu"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max SKU rows",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum rows to return across all search terms (1–500). A product can yield several rows: Single box and Whole Set are priced separately. Keep the default small so Store Try it / automated QA finish fast.",
            "default": 20
          },
          "includeSoldOut": {
            "title": "Include sold-out SKUs",
            "type": "boolean",
            "description": "Keep SKUs with zero stock. Leave on to track restocks and drop history; turn off to list only what is buyable right now.",
            "default": true
          },
          "includeZeroPriceSkus": {
            "title": "Include zero-price add-on SKUs",
            "type": "boolean",
            "description": "Pop Mart lists some add-on / quantity placeholder SKUs with no real price. Off by default so every row carries a usable price.",
            "default": false
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "snapshot",
              "watch"
            ],
            "type": "string",
            "description": "snapshot (default) returns the catalog once and records stock-level changes since the last run. watch polls the same search inside this run until the window ends, then exits. Start a watch run shortly before releaseAt (UTC) — the Actor does not wait beforehand and does not schedule another run.",
            "default": "snapshot"
          },
          "autoWatch": {
            "title": "Auto-watch upcoming releases",
            "type": "boolean",
            "description": "Off by default, so a snapshot ends after one look. When mode is snapshot and this is on, SKUs whose releaseAt (UTC) falls within the next watch window stay in this same run: only those SKUs are polled every pollIntervalSec until the window ends. No second run and no schedule. If nothing releases in that window, the snapshot ends as usual. A schedule of yours every 30–60 minutes plus this flag is how drops get covered.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Key-value store that remembers the last stock level and price per SKU. Default popmart-state. Two parallel runs with different names do not overwrite each other. The same name still races.",
            "default": "popmart-state"
          },
          "watchProductIds": {
            "title": "Watch product IDs",
            "type": "array",
            "description": "Optional. Product IDs from popmart.com/us/products/{id}. In watch mode the run still uses searchTerms (the series keyword) and keeps only these products. Up to 40. Ignored in snapshot mode. The product page itself does not include the stock level.",
            "items": {
              "type": "string"
            }
          },
          "pollIntervalSec": {
            "title": "Poll interval (seconds)",
            "minimum": 15,
            "maximum": 300,
            "type": "integer",
            "description": "Watch mode only. Seconds between looks (15–300, default 60). A stock change is timed as the gap between the two looks, not as an exact second. Ignored in snapshot mode.",
            "default": 60
          },
          "watchWindowMinutes": {
            "title": "Watch window (minutes)",
            "minimum": 30,
            "maximum": 60,
            "type": "integer",
            "description": "Watch mode only. How long this run keeps polling (30–60, default 45). Set the Apify run timeout longer than this window. If the timeout is shorter, the run stops early and the log says the window did not complete.",
            "default": 45
          },
          "proxyConfiguration": {
            "title": "Proxy (RESIDENTIAL US recommended)",
            "type": "object",
            "description": "popmart.com sits behind Cloudflare. RESIDENTIAL with country US keeps prices in USD and avoids rate limits on large runs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}