{
  "openapi": "3.0.1",
  "info": {
    "title": "Spyhe Whatnot Scraper — Listings, Sellers, Reviews & Live Chat",
    "description": "Scrape public Whatnot listings, seller shops, profiles, reviews, shows and category rankings. Capture live chat and auction bid observations, track listing changes, and export JSON/CSV with clear coverage limits.",
    "version": "0.1",
    "x-build-id": "t7FY1j1aNCnUXjc09"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/spyhe~whatnot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-spyhe-whatnot-scraper",
        "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/spyhe~whatnot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-spyhe-whatnot-scraper",
        "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/spyhe~whatnot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-spyhe-whatnot-scraper",
        "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",
        "required": [
          "modes"
        ],
        "properties": {
          "modes": {
            "title": "Data modules",
            "type": "array",
            "description": "Choose public data modules. Marketplace modules are bounded and report partial pagination explicitly.",
            "items": {
              "type": "string",
              "enum": [
                "category",
                "seller",
                "shows",
                "reviews",
                "search",
                "shop",
                "listings",
                "categories",
                "categoryShows",
                "auctionSnapshot",
                "chat",
                "categoryRankings"
              ]
            },
            "default": [
              "category"
            ]
          },
          "categorySlugs": {
            "title": "Category slugs",
            "type": "array",
            "description": "Exact public /tag/ slug, not a display label or aggregate parent.",
            "default": [
              "fragrances"
            ],
            "items": {
              "type": "string"
            }
          },
          "sellerUsernames": {
            "title": "Seller usernames",
            "type": "array",
            "description": "Required for seller, shows and reviews. Public IDs are resolved live; no fixed 14-seller restriction.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "saveEvidence": {
            "title": "Save sanitized response evidence",
            "type": "boolean",
            "description": "Save necessary metadata and GraphQL responses to the run key-value store. No buyer identities, cookies, token headers or HTML scripts.",
            "default": false
          },
          "maxPages": {
            "title": "Maximum pages per connection",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Hard bounded limit; a page cap is partial coverage. Review date boundaries are partial unless the source connection is exhausted.",
            "default": 3
          },
          "maxItems": {
            "title": "Maximum dataset items",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Hard bounded limit; a page cap is partial coverage. Review date boundaries are partial unless the source connection is exhausted.",
            "default": 1000
          },
          "maxRequests": {
            "title": "Maximum external requests",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Combined HTTP requests and WebSocket connection attempts. Retries and anonymous session requests consume this budget.",
            "default": 100
          },
          "reviewDays": {
            "title": "Review window in days (0 = accessible history)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Hard bounded limit; a page cap is partial coverage. Review date boundaries are partial unless the source connection is exhausted.",
            "default": 30
          },
          "timeoutSeconds": {
            "title": "Per-request timeout seconds",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Hard bounded limit; a page cap is partial coverage. Review date boundaries are partial unless the source connection is exhausted.",
            "default": 30
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Bounded to 100 values. Use the relevant marketplace mode.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "listingUrls": {
            "title": "Public listing URLs",
            "type": "array",
            "description": "Bounded to 100 values. Use the relevant marketplace mode.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "categoryIds": {
            "title": "Source category IDs",
            "type": "array",
            "description": "Bounded to 100 values. Use the relevant marketplace mode.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "shopQuery": {
            "title": "Seller shop keyword",
            "type": "string",
            "description": "Optional keyword for shop mode.",
            "default": ""
          },
          "listingOrder": {
            "title": "Source listing order",
            "enum": [
              "bestMatch",
              "priceAsc",
              "priceDesc",
              "newest"
            ],
            "type": "string",
            "description": "Ordering sent to the public search/shop source.",
            "default": "bestMatch"
          },
          "saleFormats": {
            "title": "Sale formats",
            "type": "array",
            "description": "Local filtering of fetched records; empty accepts all.",
            "items": {
              "type": "string",
              "enum": [
                "AUCTION",
                "BUY_IT_NOW"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "Optional local filter in priceCurrency. No currency conversion."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "Optional local filter in priceCurrency. No currency conversion."
          },
          "priceCurrency": {
            "title": "Price filter currency",
            "enum": [
              "USD",
              "GBP",
              "EUR",
              "CAD",
              "AUD",
              "NZD"
            ],
            "type": "string",
            "description": "Local price filters apply only to this currency; no exchange conversion.",
            "default": "USD"
          },
          "liveOnly": {
            "title": "Only source-marked live listings",
            "type": "boolean",
            "description": "Local filter; unknown live state is not treated as live.",
            "default": false
          },
          "searchVertical": {
            "title": "Search result type",
            "enum": [
              "PRODUCT",
              "LIVESTREAM",
              "USER",
              "CATEGORY",
              "UNIVERSAL"
            ],
            "type": "string",
            "description": "UNIVERSAL merges four bounded searches. Product filters affect PRODUCT rows only; each vertical has its own coverage in SUMMARY.",
            "default": "PRODUCT"
          },
          "monitorChanges": {
            "title": "Only initial and changed listing observations",
            "type": "boolean",
            "description": "Persistent state across runs; same scope is exclusive. Unchanged scans still consume platform resources.",
            "default": false
          },
          "monitorNamespace": {
            "title": "Monitoring namespace",
            "type": "string",
            "description": "Use a different namespace for an independent baseline. Lowercase letters, digits and hyphens, up to 48 characters.",
            "default": "default"
          },
          "maxRunSeconds": {
            "title": "Total processing time limit",
            "minimum": 5,
            "maximum": 600,
            "type": "integer",
            "description": "Bounds source processing and output; platform timeout can be lower.",
            "default": 300
          },
          "maxRetries": {
            "title": "Temporary request retries",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Only bounded network failures and selected 5xx; all attempts count toward maxRequests. No 401/403/429 retries.",
            "default": 2
          },
          "recoveryDatasetId": {
            "title": "Previous Dataset for recovery",
            "type": "string",
            "description": "Only needed when unresolved events belong to an older run. Select that run's primary Dataset to grant read-only reconciliation; normal monitoring needs no selection."
          },
          "searchUrls": {
            "title": "Public search URLs",
            "type": "array",
            "description": "Public /search URLs with query, searchVertical and native JSON sort. Other filtering parameters are rejected rather than silently ignored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "liveUrls": {
            "title": "Public live-show URLs",
            "type": "array",
            "description": "Required for auctionSnapshot or chat; at most three distinct shows. Only fixed Whatnot HTTPS live URLs are accepted.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "chatDurationSeconds": {
            "title": "Chat capture seconds",
            "minimum": 5,
            "maximum": 600,
            "type": "integer",
            "description": "Finite best-effort window, subject to maxRunSeconds and the platform timeout. Messages save as they arrive.",
            "default": 30
          },
          "includeRecentMessages": {
            "title": "Include initial recent chat",
            "type": "boolean",
            "description": "Keep the recent batch on join. After reconnect the recovery batch is retained and marked separately; this is not full history.",
            "default": true
          },
          "auctionWaitSeconds": {
            "title": "Auction observation seconds",
            "minimum": 5,
            "maximum": 30,
            "type": "integer",
            "description": "Wait for a public active-auction observation. Zero rows mean none was observed during this window, not proof no auction exists.",
            "default": 10
          },
          "rankingInterval": {
            "title": "Category leaderboard period",
            "enum": [
              "CURRENT_DAY",
              "CURRENT_WEEK",
              "LIVE"
            ],
            "type": "string",
            "description": "Whatnot source leaderboard for the exact tag and period. Rank follows the returned connection order, not local follower or sold-count sorting.",
            "default": "CURRENT_DAY"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}