Twitch capabilities
What Sway could obtain with the child's OAuth authorisation — and the considerably longer list of what it could not.
Twitch's documented API genuinely supports parts of the use case through sanctioned OAuth scopes. No scraping, no credential sharing. But two Developer Agreement clauses may prohibit showing the data to a parent at all, and a 24-hour cache cap rules out trend reporting.
Three findings that reshape the business case
1. Twitch shipped this product six days ago
Family Center launched 2026-07-21. A linked guardian of a 13–17 account gets content-label filtering, block-going-live, disable Whispers, daily cross-device time limits — and a weekly email listing which channels the teen watched and how many hours.
Likely — the official help pages are Salesforce single-page apps that return only an error shell to every automated method tried, including the Wayback Machine. Launch date, age range, teen-initiated linking, either-party unlink and the weekly email were independently corroborated via Dexerto, 21 Jul 2026.
There is no API for any of it — zero occurrences of parental,
family, guardian or teen across the entire API reference and
changelog. Confirmed by exhaustive absence.
Twitch now gives away free, by email, the single data point Sway most wants and provably cannot build. This is simultaneously the strongest validation of the thesis and its most direct competitor.
2. Watch history does not exist in the API. At all.
The complete Helix reference (1.4 MB, 149 endpoints) was downloaded and enumerated programmatically rather than sampled. There is no watch history, no viewing history, no minutes-watched, no "currently watching", no presence. Confirmed — API reference.
For a platform whose child-safety story is "what are they watching and for how long", this is the defining constraint. We can see who they follow. Never what they watched.
3. Two clauses may prohibit the use case outright
§VI.B limits Twitch Data to an enumerated purpose list, where "the limited purposes for which the end user has given you permission" requires Twitch's prior written permission. §VI.C forbids Twitch Data being "made available to… any third parties for any purpose without Twitch's prior written permission".
Is the parent a third party? Sway's entire function is making the child's Twitch Data available to their guardian. Unverified — and it is a question for Twitch's developer relations, not Sway's counsel.
What we can get
| Data point | Method | Scope | Freshness |
|---|---|---|---|
| Whispers received — the best signal on the platform | EventSub user.whisper.message | user:read:whispers |
Real-time, no history |
| Own message caught by AutoMod | EventSub channel.chat.user_message_hold | user:read:chat |
Real-time |
| Channels followed | GET /helix/channels/followed |
user:read:follows | Poll |
| Content maturity of followed channels | GET /helix/channels → content_classification_labels[] |
none | Poll |
| Blocked users | GET /helix/users/blocks |
user:read:blocked_users | Poll |
| Account creation date | GET /helix/users → created_at |
none | Static |
| Child's own broadcasts, VODs, clips | /helix/streams, /videos, /clips |
none | Poll |
| Authorisation revoked | EventSub user.authorization.revoke |
none | Real-time — wire to hard delete |
All rows Confirmed against the live scopes reference.
What we cannot get
| Cannot get | Why | What we offer instead |
|---|---|---|
| Watch history | No endpoint among all 149 | Follows as an interest proxy; Family Center's weekly email; the data export (≤14 day lag) |
| Time spent watching | No endpoint | OS screen-time — app-level total only, never which channel |
| Currently watching | No endpoint; Get Chatters needs the broadcaster's mod scope |
Presence inferable only if they chat. Silent lurking is invisible |
| Whispers she sends | The event fires on receipt only; there is no read-sent endpoint | Received whispers give the counterparty and usually enough context |
| Any history before connect | Real-time push only. PubSub shut down 2025-04-14 | Forward-only. Set this expectation at onboarding |
| Bits balance / spend | bits:read is broadcaster-side; no balance endpoint exists |
Data export, batch. No running total |
| Clips she created | Get Clips cannot filter by creator_id |
Clips from her own channel only |
| Her age or DOB | Not on Get Users; no birthdate OIDC claim |
Account age as a weak floor. Age comes from the guardian |
| Voice chat | The feature does not exist on Twitch. All voice products retired by 2024 | Nothing needed — remove from the roadmap |
| Family Center state | No API surface whatsoever | Guide the guardian to enable it |
| Any under-13 data | Prohibited by ToS §2 | Nothing — but an under-13 account existing is itself a finding worth surfacing |
The architectural trap
"When subscribing to events using webhooks, you must use an app access token."
But channel.chat.message additionally requires channel:bot from the
broadcaster when an app token is used — which we will never have for channels the child
merely watches.
Consequence: whispers → scalable webhooks. Chat → a persistent WebSocket or IRC connection per child, which does not fit Cloudflare Workers' request-scoped model and would need a Durable Object or a container. Confirmed
Two spikes that block planning
Own-message echo
Does the child's own sent message echo back on a separate EventSub or IRC connection? The IRC
docs say a connection does not receive its own PRIVMSG. Undocumented for a separate
connection. Unverified · ~½ day
EventSub cost
What total_cost does channel.chat.message return when the broadcaster
has not authorised us? If non-zero, the 10-cost WebSocket ceiling is hit immediately.
Unverified · ~½ day
Recommendation
- Legal before engineering. Written permission under §VI.B(e) and §VI.C is a prerequisite. Without it, guardian-facing display and any retention beyond 24 hours are non-compliant.
- Ship whispers first. Scalable, needs only the child's consent, no broadcaster cooperation, targets the highest-severity risk. Best capability-to-effort ratio by a wide margin.
- Design for forward-only, ephemeral chat. In-memory processing, emit a signal, discard raw third-party text.
- Treat Family Center as a strategy question. Sway's defensible ground is cross-platform aggregation and real-time risk detection — not re-deriving what Twitch emails free.