{
  "openapi": "3.0.1",
  "info": {
    "title": "Whatnot Scraper - Live Shows, Lots & Sellers",
    "description": "Scrape Whatnot live and upcoming shows, queued items and lots, and seller profiles. Search by keyword or URL, then filter by category, format, seller rating, and country. Extract ratings, followers, sold counts, and more.",
    "version": "1.0",
    "x-build-id": "qNSG8FwFtGdBQIeua"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~whatnot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-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/abotapi~whatnot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-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/abotapi~whatnot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose 'search' for keyword search across live shows, items or sellers, or 'url' to scrape pasted links.",
            "default": "search"
          },
          "resultType": {
            "title": "Result type",
            "enum": [
              "shows",
              "lots",
              "sellers",
              "mixed"
            ],
            "type": "string",
            "description": "What each search returns. 'Live shows' returns shows playing now and shows scheduled for later, with seller, category, tags, start time and audience size. 'Items and lots' returns the individual items sellers have listed, including the ones queued into an upcoming show. 'Sellers' returns seller profiles. 'Mixed' uses the platform's own blended ranking and returns all three kinds in one feed. In URL mode this only decides what a pasted SEARCH link returns; a pasted show, item or seller link always returns its own kind.",
            "default": "shows"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords. Examples: 'charizard', 'psa 10 rookie', 'vintage lego', 'jordan 1'. Each keyword gets its own share of Max results, so one popular keyword cannot swallow the whole run.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Whatnot links",
            "type": "array",
            "description": "Mix freely: show links (whatnot.com/live/<id>), item links (whatnot.com/listing/<id>), seller links (whatnot.com/user/<username>, which returns the seller plus their scheduled shows and their shop), category links (whatnot.com/tag/<category>) or search links (whatnot.com/search?query=...). A locale prefix such as /en-GB/ is accepted.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Only return results in these categories, given as the category handle in its address, for example 'pokemon_cards' from whatnot.com/tag/pokemon_cards. Try 'sports_cards', 'sneakers_streetwear', 'comics', 'coins_and_money', 'toys' or 'video_games_and_movies'. The list is checked against the site's own category list at the start of the run, so a handle that does not exist stops the run and names the closest matches instead of quietly returning everything.",
            "items": {
              "type": "string"
            }
          },
          "showStatus": {
            "title": "Time of show (live shows only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return shows in these states. 'Playing now' is a show streaming at this moment; 'Scheduled' is a show announced for later. Applies when Result type is 'Live shows' or 'Mixed'. Note that ENDED shows are not published by the site at all and cannot be returned by any value here.",
            "items": {
              "type": "string",
              "enum": [
                "PLAYING",
                "CREATED"
              ],
              "enumTitles": [
                "Playing now",
                "Scheduled for later"
              ]
            }
          },
          "showFormat": {
            "title": "Show format (live shows only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return shows the seller runs in these formats. Applies when Result type is 'Live shows' or 'Mixed'.",
            "items": {
              "type": "string",
              "enum": [
                "primary_show_format_auction",
                "primary_show_format_breaks",
                "primary_show_format_buy_it_now",
                "primary_show_format_graded",
                "primary_show_format_singles",
                "primary_show_format_mystery_bags"
              ],
              "enumTitles": [
                "Auction",
                "Breaks",
                "Buy It Now",
                "Graded",
                "Singles",
                "Surprise Sets"
              ]
            }
          },
          "buyingFormat": {
            "title": "Buying format (items and lots only)",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return items sold this way. 'Buy It Now' is a fixed price; 'Live auction' is a lot that will be auctioned during a show. Applies when Result type is 'Items and lots' or 'Mixed'.",
            "items": {
              "type": "string",
              "enum": [
                "BUY_IT_NOW",
                "LIVESTREAM_AUCTION"
              ],
              "enumTitles": [
                "Buy It Now",
                "Live auction"
              ]
            }
          },
          "conditions": {
            "title": "Condition (items and lots only)",
            "type": "array",
            "description": "Only return items the seller marked with these conditions, for example 'Near Mint', 'Graded', 'Brand New', 'Used' or 'Light Played'. The site publishes a long, category-specific condition vocabulary, so this is free text rather than a fixed list. A value the site does not use returns no results rather than everything.",
            "items": {
              "type": "string"
            }
          },
          "gradedOnly": {
            "title": "Graded only (items and lots only)",
            "type": "boolean",
            "description": "Only return items the seller has marked as professionally graded. Applies when Result type is 'Items and lots' or 'Mixed'.",
            "default": false
          },
          "autographedOnly": {
            "title": "Autographed only (items and lots only)",
            "type": "boolean",
            "description": "Only return items the seller has marked as autographed. Applies when Result type is 'Items and lots' or 'Mixed'.",
            "default": false
          },
          "minSellerRating": {
            "title": "Minimum seller rating",
            "enum": [
              "any",
              "4.0",
              "4.5",
              "5.0"
            ],
            "type": "string",
            "description": "Only return results from sellers rated at or above this score out of 5.",
            "default": "any"
          },
          "premierShopOnly": {
            "title": "Premier shops only",
            "type": "boolean",
            "description": "Only return results from sellers the platform has marked as Premier Shops.",
            "default": false
          },
          "sellerCountries": {
            "title": "Seller country",
            "uniqueItems": true,
            "type": "array",
            "description": "Only return results from sellers in these countries.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "GB",
                "AU",
                "FR",
                "CA",
                "NL",
                "DE",
                "JP",
                "BE",
                "AT"
              ],
              "enumTitles": [
                "United States",
                "United Kingdom",
                "Australia",
                "France",
                "Canada",
                "Netherlands",
                "Germany",
                "Japan",
                "Belgium",
                "Austria"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return items priced at or above this amount, in the currency the item is listed in. Applied by this actor to each record's own reported price, not sent upstream: the site accepts a price filter and then returns items below the floor anyway (measured, in every encoding its own field name suggests), so the bound is kept here where it can actually be honoured. Records with no price of their own, such as seller profiles, are never dropped by a price bound."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return items priced at or below this amount, in the currency the item is listed in. Applied by this actor to each record's own reported price, for the same reason as the minimum above."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "recommended",
              "viewers-desc",
              "viewers-asc",
              "best-match",
              "price-asc",
              "price-desc",
              "newest"
            ],
            "type": "string",
            "description": "Ordering asked of the site. The valid values differ by Result type, because the site offers different orderings for shows and for items: shows accept 'recommended', 'viewers-desc' and 'viewers-asc'; items and sellers accept 'best-match', 'price-asc', 'price-desc' and 'newest'. A value that does not belong to the current Result type stops the run rather than silently returning the default order."
          },
          "fetchSellerDetails": {
            "title": "Read each seller's full profile",
            "type": "boolean",
            "description": "Adds the seller's display name, bio, following count, average shipping days, store banner and, optionally, their recent reviews to every result. Off by default because every result already carries the seller's username, rating, review count, follower count, sold count, verified flag and Premier Shop flag. Profiles are cached within a run, so ten shows from one seller cost one extra request.",
            "default": false
          },
          "maxSellerReviews": {
            "title": "Reviews per seller",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many of each seller's most recent reviews to attach, when 'Read each seller's full profile' is on. Set 0 to attach none and skip the extra request. Reviews carry the rating, the text, the seller's reply and the date.",
            "default": 20
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of results returned across the whole run. This is the run's cap. Use 0 for unlimited.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per keyword or link",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum result pages walked per keyword or link, at 24 results a page. 0 means no page limit: the run then stops only at Max results, or when the site runs out of results.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run id or dataset id to continue a large crawl without returning, or charging for, results already collected there. Use this after an interrupted run. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns everything matching as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED results, which is how you catch a newly scheduled show, a show going live, a price change or a fresh lot in a category you watch. Audience counters and seller follower counts are deliberately ignored when deciding what changed, because they drift constantly and would otherwise mark every result as changed on every run. State is kept separately for each mode, result type, keyword set and filter setup, so two different searches never mix.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from the mode, result type, keywords, links and filters."
          },
          "emitUnchanged": {
            "title": "Emit unchanged results (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return results that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired results (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return results that were present in a previous run but are no longer found, marked EXPIRED, which is how a show finishing or a lot selling shows up. Only produced once a run has fully scanned the tracked search, never when Max results capped it or Resume was used. This returns, and bills, extra rows.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is recommended. Leave the default selected unless a run reports that requests were refused.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a rich page per item; other connectors get a best-effort write or digest. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}