Whatnot All-in-One API avatar

Whatnot All-in-One API

Pricing

from $1.01 / 1,000 listing returneds

Go to Apify Store
Whatnot All-in-One API

Whatnot All-in-One API

Unofficial always-on REST API for live Whatnot data: live streams, listing search with 16 verified filters, listing detail, sellers, reviews and categories. No account, app or device needed. Runs in Apify Standby.

Pricing

from $1.01 / 1,000 listing returneds

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Whatnot All-in-One API is an unofficial, always-on REST API for live Whatnot data: live streams, marketplace listings with 16 verified filters (graded cards, PSA/CGC/Beckett, set, rarity, price, condition, ...), listing detail, seller profiles, seller reviews and inventory, and the category/tag catalogue. It calls the same GraphQL API the Whatnot mobile app uses for a signed-out user, so no account, app or device is needed. Because this Actor runs in Standby mode on the Apify platform, you call it like any REST API and get clean JSON back in about a second, with Apify handling authentication, scaling and monitoring for you.

Why use Whatnot All-in-One API?

  • Collectibles market research — track what is listed for a card, set or grade: prices, formats (buy-it-now vs live auction), seller countries and how many listings match.
  • Live-commerce monitoring — see which shows are live in a category, their viewers, sellers and what they are selling right now.
  • Seller intelligence — rating breakdown (shipping, packaging, accuracy), sold count, followers and written reviews for any seller.
  • Lead generation and sourcing — find sellers by name, list their current inventory, and filter by price, format or category.

How to use Whatnot All-in-One API

  1. Click Try for free and start this Actor (Standby mode starts it once and keeps it warm).
  2. Copy the Actor's Standby URL from the Standby tab.
  3. Call any endpoint below, e.g. GET {standby-url}/listings/search?q=psa%2010%20charizard&graded=true&gradingService=PSA&limit=20.
  4. Authenticate the call with your Apify token (Authorization: Bearer <token> or ?token=).

No Whatnot login or API key is needed: this is the same public data the app shows to a signed-out user.

Input

This Actor takes no run-input configuration: it starts immediately in Standby mode. Every real parameter is passed per request as an HTTP query parameter. See Endpoints below or the Actor's API tab for the full OpenAPI schema.

Pagination

Every list endpoint returns items plus pageInfo: { hasNextPage, nextCursor } and is paged with limit (up to 50 per request) and cursor (the previous response's nextCursor). Notes verified against the live API:

  • Live-stream feeds are re-ranked on every request, so a stream can repeat between pages: de-duplicate by id. Category/tag live feeds never report the end of the list; stop when a page brings no new ids.
  • Listing search reaches about 1,000 results per query (a hard server-side depth). Results after the strict matches (Whatnot's broader "results matching fewer words" backfill) are cut off and the response says so in note.
  • total (where offered) is the server-side match count and is capped at 10,000.

Endpoints

Live streams

GET /livestreams

Live streams currently on air: title, viewers, start time, tags, categories, seller and thumbnail. Without category/tag this is the logged-out "For You" feed. The feed is re-ranked on every request, so pages can repeat a stream (de-duplicate by id); category/tag feeds never report an end, so stop when a page brings no new ids.

ParamRequiredDescription
categorynoCategory id from GET /categories (numeric or global id), e.g. 149 = Trading Card Games.
tagnoTag id from GET /tags (numeric or global id). Ignored when category is set.
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (livestream event); an empty result is free.

GET /livestreams/search

Full-text search over live and upcoming shows. Ended shows are not searchable.

ParamRequiredDescription
qyesSearch text.
statusnoPLAYING = live now, CREATED = scheduled. (one of PLAYING, CREATED)
sortnoOrder by current viewers. Omit for best match. (one of viewers_desc, viewers_asc)
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (livestream event); an empty result is free.

GET /livestreams/:id

One show: title, status (PLAYING, ENDED, ...), viewers, start time, endTime (ended shows), tags, categories and seller.

ParamRequiredDescription
idyesLive stream id (uuid) from /livestreams.

Billed once per successful request (livestream-detail event).

GET /livestreams/:id/listings

The show's shop: buy-it-now items and queued/running auctions with price, title, quantity, images and seller. total is the full shop size. Ended shows have an empty shop.

ParamRequiredDescription
idyesLive stream id (uuid).
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (listing event); an empty result is free.

Listings

GET /listings/search

Product search over currently listed items with 16 verified filters (category, buying format, seller rating, price range, graded/autographed, condition, language, set, rarity, grade, grading service, card number, year, ...). Values inside one filter are OR, different filters are AND. Sold listings are not searchable. Up to ~1000 results are reachable per query; results after the strict matches (broader "fewer words" backfill) are cut off. Whatnot ignores unknown non-attribute filter names, but an attribute that does not exist for the category (e.g. year on Pokémon cards) returns no results, so use the exact parameters below.

ParamRequiredDescription
qyesSearch text, e.g. psa 10 charizard.
categorynoCategory key(s) from GET /listings/filters, e.g. pokemon_cards. Comma-separated values are OR. (comma-separated)
buyingFormatnoFixed-price listings or live auctions only. (one of BUY_IT_NOW, LIVESTREAM_AUCTION)
minSellerRatingnoMinimum seller rating. (one of 5.0, 4.5, 4.0)
premierShopnoOnly Premier Shop sellers.
sellerCountrynoSeller ship-from country code(s), e.g. US,GB. (comma-separated)
minPricenoMinimum price in major units (e.g. dollars); the server compares on a currency-normalised price.
maxPricenoMaximum price in major units.
gradednoOnly graded items (trading cards).
autographednoOnly autographed items.
conditionnoItem condition(s), e.g. Near Mint. (comma-separated)
languagenoLanguage(s), e.g. English,Japanese. (comma-separated)
productTypenoProduct type(s), e.g. Card, Booster Box. (comma-separated)
setnoSet name(s), e.g. Base Set. (comma-separated)
raritynoRarity value(s), e.g. Rare. (comma-separated)
gradenoGrade(s), e.g. 10, 9.5. (comma-separated)
gradingServicenoGrading company: PSA, CGC, BECKETT, TAG, SGC, ... (comma-separated)
cardNumbernoCard number(s). (comma-separated)
yearnoYear(s), sports cards (e.g. 2023, 1997). Pokémon cards have no Year attribute. (comma-separated)
sortnoResult order. Omit for best match. (one of price_asc, price_desc, newest, oldest)
includeTotalnoAlso return total (server-side match count, capped at 10000). Costs one extra upstream call.
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (listing event); an empty result is free.

GET /listings/filters

The filters and sorts available for a search text, with their valid values (categories, sets, rarities, grades, grading services, ...) and the total number of matches.

ParamRequiredDescription
qyesSearch text.

Billed once per successful request (listing-filters event).

GET /listings/:id

One listing: title, description, price, status, transaction type, category, attributes (condition, set, grade, ...), images, seller, views and product. Sold listings keep their metadata but their sale price and bids are redacted by Whatnot.

ParamRequiredDescription
idyesListing id: numeric (2319377156) or the global id returned by other endpoints.

Billed once per successful request (listing-detail event).

Sellers

GET /sellers/search

Find sellers by name: username, rating, sold count, followers and verification.

ParamRequiredDescription
qyesSeller name text.
limitnoItems per page, 1-50 (default 10).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (seller event); an empty result is free.

GET /sellers/:username

Rating (overall/shipping/packaging/accuracy and review count), sold count, followers, verification, Premier Shop status, ship-from country and whether the seller is live. Bio, display name and images are personal data and only returned with includeProfileDetails=true.

ParamRequiredDescription
usernameyesSeller username (case-insensitive).
includeProfileDetailsnoAlso return bio, display name and profile/store images.

Billed once per successful request (seller-profile event).

GET /sellers/:username/reviews

Written reviews, newest first: rating, text, date, seller response and per-topic ratings (overall, shipping, packaging, accuracy). total counts every rating of the seller, including ratings without text. Reviewer identities are personal data and only returned with includeReviewers=true.

ParamRequiredDescription
usernameyesSeller username (case-insensitive).
minRatingnoOnly reviews with an overall rating of at least this many stars.
includeReviewersnoAlso return reviewer username, id and photo.
limitnoItems per page, 1-100 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (review event); an empty result is free.

GET /sellers/:username/listings

A seller's current marketplace inventory (fixed-price and upcoming auctions). Sellers who only sell live have an empty inventory. Sold listings are not exposed.

ParamRequiredDescription
usernameyesSeller username (case-insensitive).
qnoOnly listings matching this text.
buyingFormatnoFixed-price or auction only. (one of BUY_IT_NOW, LIVESTREAM_AUCTION)
minPricenoMinimum price in major units.
maxPricenoMaximum price in major units.
sortnoResult order. (one of price_asc, price_desc, newest, oldest)
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (listing event); an empty result is free.

GET /sellers/:username/livestreams

The seller's shows that are live now or scheduled. Past shows are not exposed.

ParamRequiredDescription
usernameyesSeller username (case-insensitive).
limitnoItems per page, 1-50 (default 10).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed per item returned (livestream event); an empty result is free.

Taxonomy

GET /categories

The category tree (two levels): top-level categories, or the children of parent. Use the numericId as category in /livestreams.

ParamRequiredDescription
parentnoParent category id (numeric or global id) to list its children, e.g. 149.

Billed once per successful request (categories event).

GET /tags

The tag catalogue (brands, fandoms, product types, set releases, ...), about 1,800 tags, paginated. Use the numericId as tag in /livestreams.

ParamRequiredDescription
typenoOnly tags of this type. (one of BRAND, FANDOM, PRODUCT_TYPE, SET_RELEASE, FASHION_STYLE, EVENT, GENRE, ITEM_CONDITION, SHOW_STYLE, SEASONAL, SIZING)
limitnoItems per page, 1-50 (default 20).
cursornoOpaque cursor: pass the previous response's pageInfo.nextCursor to get the next page.

Billed once per successful request (tags event).

GET /autocomplete

Search-as-you-type suggestions: matching queries, sellers and tags, with result counts.

ParamRequiredDescription
qyesText typed so far.

Billed once per successful request (autocomplete event).

Output

Every response is plain JSON. List endpoints:

{
"success": true,
"items": [
{
"id": "TGlzdGluZ05vZGU6MjMxOTM3NzE1Ng==",
"numericId": 2319377156,
"title": "Slab: Pokemon: Charizard ex: SAR: Shiny Treasure ex: PSA 10",
"price": { "amountMinor": 44000, "currency": "USD" },
"transactionType": "BUY_IT_NOW",
"listingStatus": "active",
"user": { "username": "example_seller" }
}
],
"pageInfo": { "hasNextPage": true, "nextCursor": "YXJyYXljb25uZWN0aW9uOjQ=" },
"total": 215
}

Single-item endpoints return { "success": true, "data": { ... } }. Errors return { "success": false, "error": "..." } with HTTP 400 (bad parameters), 404 (not found) or 502 (Whatnot error).

Data notes

  • Money is { amountMinor, currency } in the currency's minor units (44000 USD = $440.00), always in the seller's own currency. Whatnot also localizes prices to the viewer's IP; those fields are dropped so results do not depend on which IP served the request.
  • Ids: nodes carry Whatnot's global id (base64) and a numericId; live streams use uuids. Listing, category and tag ids also accept the plain numeric form.
  • Personal data: reviewer identities, seller bio, display name and profile photos are off by default and only returned with includeReviewers=true / includeProfileDetails=true.

What is not available

Whatnot only serves the following to logged-in users or redacts it for everyone, so this Actor does not offer it:

  • Sold prices and bid history. Sold listings can be read but their sale price and bids are redacted by Whatnot; the search index only contains active listings.
  • Followers/following lists, seller leaderboards and personalized feeds (Following, marketplace "For You").
  • Past shows (only live and scheduled shows are exposed).

Pricing / Cost estimation

This Actor is billed pay-per-event:

  • List endpoints are billed per item returned (live streams, listings, reviews, sellers): a page of 50 listings is 50 listing events, and an empty result is free. That is the same unit other Whatnot scrapers use, priced below the market leaders.
  • Single-object endpoints (listing detail, seller profile, live stream detail, filter options) and taxonomy endpoints (categories, tags, autocomplete) are billed once per successful request.

The per-event price is shown on the Actor's page and gets cheaper on higher Apify plans. There is no per-minute compute charge because Standby keeps the Actor warm between calls, and failed requests are not billed.

Tips

  • Use GET /listings/filters?q=... first to see the exact category, set, rarity and grading values for a search, then pass them to /listings/search.
  • Filters are AND across fields and OR inside one field. Whatnot silently ignores unknown non-attribute filter names, but an attribute that does not exist for a category (e.g. year on Pokémon cards) returns zero results; use the parameter names in this README.
  • minPrice/maxPrice are in major units (dollars) and compared on a currency-normalised price.

FAQ, disclaimers, and support

This is an unofficial Actor, not affiliated with or endorsed by Whatnot Inc. It reads only data that Whatnot shows to signed-out users in its own app; no account credentials, private data or bypassed authentication are involved. Use responsibly and in line with Whatnot's Terms of Service and applicable law; do not use it to enumerate ids or to collect personal data.

Found an issue or need a custom endpoint? Use the Issues tab on this Actor's page.