Sway team docs

Gaming data integration analysis. Internal working document.

This password is a deterrent, not protection. GitHub Pages has no server-side authentication. This page is publicly reachable and its full text reached your browser before this prompt appeared.

Twitch capabilities

What Sway could obtain with the child's OAuth authorisation — and the considerably longer list of what it could not.

Verdict: buildable, narrowly — pending one written answer

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.

The strategic problem

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. ConfirmedAPI 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 pointMethodScopeFreshness
Whispers received — the best signal on the platform EventSub user.whisper.messageuser:read:whispers Real-time, no history
Own message caught by AutoMod EventSub channel.chat.user_message_holduser:read:chat Real-time
Channels followedGET /helix/channels/followed user:read:followsPoll
Content maturity of followed channelsGET /helix/channelscontent_classification_labels[] nonePoll
Blocked usersGET /helix/users/blocks user:read:blocked_usersPoll
Account creation dateGET /helix/userscreated_at noneStatic
Child's own broadcasts, VODs, clips/helix/streams, /videos, /clips nonePoll
Authorisation revokedEventSub user.authorization.revoke noneReal-time — wire to hard delete

All rows Confirmed against the live scopes reference.

What we cannot get

Cannot getWhyWhat we offer instead
Watch historyNo endpoint among all 149 Follows as an interest proxy; Family Center's weekly email; the data export (≤14 day lag)
Time spent watchingNo endpoint OS screen-time — app-level total only, never which channel
Currently watchingNo endpoint; Get Chatters needs the broadcaster's mod scope Presence inferable only if they chat. Silent lurking is invisible
Whispers she sendsThe event fires on receipt only; there is no read-sent endpoint Received whispers give the counterparty and usually enough context
Any history before connectReal-time push only. PubSub shut down 2025-04-14 Forward-only. Set this expectation at onboarding
Bits balance / spendbits:read is broadcaster-side; no balance endpoint exists Data export, batch. No running total
Clips she createdGet Clips cannot filter by creator_id Clips from her own channel only
Her age or DOBNot on Get Users; no birthdate OIDC claim Account age as a weak floor. Age comes from the guardian
Voice chatThe feature does not exist on Twitch. All voice products retired by 2024 Nothing needed — remove from the roadmap
Family Center stateNo API surface whatsoever Guide the guardian to enable it
Any under-13 dataProhibited by ToS §2 Nothing — but an under-13 account existing is itself a finding worth surfacing

The architectural trap

Whispers scale. Chat does not.

"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

  1. 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.
  2. 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.
  3. Design for forward-only, ephemeral chat. In-memory processing, emit a signal, discard raw third-party text.
  4. 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.