Numbers — API endpoints
Base domain
Section titled “Base domain”https://numbers.streamercatalyst.com
The StreamerCatalyst dashboard calls the session endpoints same-origin through https://streamercatalyst.com/m/numbers/* (for example /m/numbers/api/channels/:id/overview reaches /api/channels/:id/overview here). That proxy forwards the session cookie over a Cloudflare service binding and never forwards /internal/*.
Endpoints
Section titled “Endpoints”| Path | Method | Auth | Description |
|---|---|---|---|
/privacy/opt-out |
GET | Public | Viewer analytics opt-out page; its start, callback, confirm and revoke steps use an identity-only Twitch sign-in. Rate-limited per IP. |
/api/channels/:id/overview |
GET | Session cookie | KPI overview totals (today / stream / 7d / 30d) per metric. |
/api/channels/:id/metrics |
GET | Session cookie | Time-series metric buckets (?metric=&range=). |
/api/channels/:id/live-totals |
GET | Session cookie | Current subscriber and follower totals, read live from Twitch. |
/api/channels/:id/sessions |
GET | Session cookie | Recent stream sessions, incl. avg/peak viewers (?limit=). |
/api/channels/:id/sessions/:sessionId |
GET | Session cookie | Session detail — viewer-count snapshot series + avg/peak summary. |
/api/channels/:id/sessions/:sessionId/people |
GET | Session cookie | Who is behind a session’s follows, subs, resubs, gifted subs and bits. |
/api/channels/:id/subscribers |
GET | Session cookie | Live subscriber list (paginated, enriched with resub months). |
/api/channels/:id/subscribers/tier-metrics |
GET | Session cookie | Tier distribution, type breakdown, and tier-progression insights (?range=). |
/api/channels/:id/subscribers/retention |
GET | Session cookie | Tenure, retention, loyalty cohorts, and anniversaries (?range=). |
/api/channels/:id/acquisition |
GET | Session cookie | Acquisition-source breakdown (?range=); /recent lists the latest rows (?limit=). |
/api/channels/:id/raids/* |
GET | Session cookie | Raid analytics — overview, incoming, outgoing, reciprocity, conversion, sources, network, insights (?range=). |
/api/channels/:id/journey/* |
GET | Session cookie | Cross-source engagement funnel, per-source comparison, and behavior archetypes (?range=). |
/api/channels/:id/patterns/* |
GET | Session cookie | Temporal, contextual, and event-driven conversion patterns (?range=). |
/api/channels/:id/behavior/* |
GET | Session cookie | Multi-session attendance and content-preference analytics (?range=). |
/api/channels/:id/hype-train-records |
GET | Session cookie | Hype-train all-time-high records (own + shared). |
/api/channels/:id/hype-trains |
GET | Session cookie | Completed Hype Trains, newest first, grouped by stream (?limit=). |
/api/channels/:id/events/recent |
GET | Session cookie | Unified recent-events feed (?limit=&types=). |
/api/channels/:id/goals |
GET/PUT/DELETE | Session cookie | Merged goal config; PUT/DELETE …/goals/:metric sets or clears one metric’s override (incl. plus_points). |
/api/channels/:id/plus |
GET | Session cookie | Plus Program estimate; PUT …/plus/config sets the adjustment offset (broadcaster or Lead Mod). |
/api/channels/:id/charity |
GET | Session cookie | Charity campaign and its total; POST …/charity/backfill imports past donations from Twitch. |
/api/channels/:id/streaks |
GET/PUT/DELETE/PATCH | Session cookie | Goal-streak summary and per-metric streak-goal management. |
/api/channels/:id/ask |
GET/POST | Session cookie | Ask about your data: GET reports eligibility and remaining quota, POST answers one question as a server-sent event stream. |
/api/channels/:id/audience/:userId |
DELETE | Session cookie | Remove one viewer’s audience-analytics rows for this channel. |
/api/channels/:id/eventsub |
GET | Session cookie | This channel’s live EventSub subscriptions, read from Twitch (the platform creates and deletes them). |
/api/channels/:id/widget/token |
GET | Session cookie | The Numbers widget token; POST …/widget/token/rotate replaces it. |
/api/widget/:channelId/data |
GET | Widget token | Numbers widget data (?token=&type=&metric=&window=). |
/internal/eventsub |
POST | Service binding (internal) | EventSub fan-out receiver (internal, from eventsub-router). |
/internal/billing/downgrade |
POST | Service binding (internal) | Tier-downgrade handler (internal). |
Auth model
Section titled “Auth model”- Session cookie endpoints require an active StreamerCatalyst session (set at login via the platform Worker). A channel-scoped route (
/api/channels/:id/…) answers only for the session’s own channel, and a read-only admin masquerade may read but not change anything. - Widget token endpoints are what OBS browser sources and overlays call. The channel’s widget token, passed as
?token=, is the credential: the channel comes from the token, and a token that does not match the channel in the URL is refused. Treat a URL that carries it like a password; rotating the token from the dashboard invalidates every URL with the old one. - Public endpoints require no authentication.
- Service binding endpoints are for other StreamerCatalyst Workers, called over Cloudflare service bindings with a shared internal token. They are not a public API.
Share Feedback
Need help or want to chat? Join our Discord to get support, report bugs, and talk with other streamers.0 / 1000
Privacy
▸ What we're sending
| Module | — |
| Page | — |
| Browser | — |
| Screen | — |
| Channel | anonymous |
| Submitted | — |