PULSE

PULSE API

Programmatic access to live Whatnot market intelligence · Base URL https://pulsemetric.live

The API is a Pro feature. Pro is free for 14 days, then $19.99/mo. Start a trial and your key arrives at checkout. Without a key you can still call the handful of public endpoints below; every other endpoint answers 402 pro_plan_required. Beyond those the free layer is pages, not endpoints. The live rankings carry the top 40 categories by live viewers, plus the live viewer total across every category, counted across the rooms Whatnot's feeds list live in each category. Every category page carries that lane's live viewers, typical room size, best hour to go live and how crowded it is. Any tracked seller's own public numbers are open too: peak viewers, average audience while live, viewer-minutes, shows tracked and their strongest hour. History, momentum, rivals, win-rate and the ranked live-show list are Pro on the page and on the API alike.

1. Versioning & stability

/api/v1/* is the supported programmatic surface and follows an additive-only stability promise: fields are never removed, renamed, or re-typed within v1. New fields may appear at any time, so parse tolerantly. The unversioned /api/* paths serve the web dashboard and behave identically today, but only /api/v1 carries the compatibility promise. GET /api/v1 returns a small JSON index pointing back to this page.

2. Authentication

Pro subscribers get an API key (wn_live_…), shown once at checkout and emailed. Present it one of these ways:

curl -H "Authorization: Bearer wn_live_xxxxxxxx" \
  "https://pulsemetric.live/api/v1/top-shows?slug=sports_cards"

No key → you are an anonymous caller: the public endpoints below work, and every other endpoint returns 402 pro_plan_required (the body carries upgrade_url). Endpoints are public or Pro; there is no anonymous teaser tier that serves partial market data. A key that is presented but not recognized (e.g. rotated away) returns 401 invalid_api_key, so always use the newest key from your last rotation. Lost it? Email [email protected].

3. Rate limits

Over a limit you get 429 with a Retry-After header and body {"error":"rate_limited","scope":"ip"|"api_key","retry_after":<seconds>}. Back off for retry_after seconds.

4. Polling guidance

Market data updates once per collection sweep, about once an hour (the cadence flexes with load). Polling faster than that returns the same data and burns your budget. GET /api/me returns poll_after_ms, the server's live back-pressure hint; well-behaved clients wait at least that long between polls. Most public per-sweep endpoints also carry Cache-Control headers you can honor.

5. Errors

Errors are JSON with a snake_case error code and usually a human-readable message:

{"error": "seller_not_found", "name": "nosuchseller", "message": "No data for that seller handle."}
StatusCodeMeaning
400missing_param, query_too_short, invalid_jsonBad or missing input; the message names the parameter.
401invalid_api_keyA key was presented but not recognized (rotated/typo).
402pro_plan_requiredPro endpoint, free caller. Carries upgrade_url + docs_url.
404not_found, seller_not_found, unknown_categoryNo such endpoint / entity.
429rate_limitedOver a rate limit; honor Retry-After.
500internal_errorOur bug. Retry later, and email support if it keeps happening.
503busy / billing_not_configuredTemporarily unavailable; retry with backoff.

6. Endpoints (GET)

Two tiers: public no key needed · pro requires a Pro API key (else 402). All paths below also exist under /api/v1/….

Market-wide

EndpointTierReturns
/api/healthpublicLiveness + snapshot/sweep counts.
/api/health/deeppublicOps health: sweep age, last-sweep signals, DB-writable.
/api/mepublicCaller's tier, account state, and poll_after_ms.
/api/taxonomypublicFull category tree (near-static; cached 1 h).
/api/market-summarypublicSweep-wide aggregates only: categories, viewers, snapshots, days_tracked.
/api/pulseproMarket-wide viewer sparkline + sweep-over-sweep delta.
/api/hot-categoriesproMarket heat by category, every lane.
/api/saturationproShows-vs-audience saturation index per category.
/api/category-demandproItems/day sales throughput by category lane.
/api/category/<slug>proLive on-demand snapshot for any category slug.
/api/insightsproEditorial market insights (unusual audiences, new highs, movers).
/api/top-shows?slug=proBiggest live audiences now (optionally per category).
/api/breakout-sellersproSellers commanding the most audience right now.
/api/momentum?slug=proShows with climbing audiences (repeatable slug scopes lanes).
/api/breaking-outproShows about to blow up + heating categories.
/api/category-trendsproCategory-level momentum trends.
/api/format-intel?slug=proShow-format leaderboard (what format wins a lane).
/api/demand-indexproCross-category demand index.
/api/statsproDataset meta (snapshots, sweeps, coverage).
/api/history?slug=proPer-sweep time series for one category.
/api/best-time?slug=proBest time to go live (by hour + weekday grid).
/api/go-live-score?slug=proRight-now "should I go live" score.
/api/reachproAudience reach by hour/day.
/api/market-share?slug=proSeller market share within a category.
/api/algo-boostedproShows the feed ranks above their audience (algorithm favor).
/api/upcomingproUpcoming scheduled shows from tracked sellers.

Per-seller

EndpointTierReturns
/api/seller-teaser?name=proOne personalized stake: top rival, lane, best window, peak.
/api/seller/<handle>/recappublicLatest post-show recap as JSON.
/api/seller/<handle>/scoreboardpublicPersonal bests + streak; win_rate_trend is Pro-only.
/api/sellers?q=proSeller search (min 2 chars) ranked by reach.
/api/seller?name=proOne seller's drill-down: summary, audience history, shows.
/api/my-report?name=proThe full "My Shows" report (never empty for a real handle).
/api/seller-stats?name=proLatest enriched profile stats (followers, sold count, rating).
/api/seller-velocityproFastest-growing tracked sellers.
/api/seller-rivals?name=proThreat-ranked same-lane rivals + head-to-head win rates.
/api/seller-cadence?name=proShow cadence/schedule pattern analysis.
/api/seller-reach?name=proA seller's audience reach profile.

Unknown-seller behavior

These are intentional and stable, so code against them. They describe an authenticated call; without a Pro key the Pro rows below answer 402 before they ever look the handle up:

Data freshness: everything above is computed from collection sweeps, about 60 min apart. Poll accordingly, and see §4.

7. Support

Questions, key re-issues, or a field you wish existed: [email protected].