All endpoints are JSON, cache: no-store friendly, and scoped to the creator slug. Never ask the
streamer for YouTube or Discord secrets inside overlay code.
GET /api/your-slug/config { likeGoal, subGoal, subsDisplayMode, twitchSubsDisplayMode, twitchFollowsDisplayMode, twitchFollowGoal, memberScrollSeconds, pollingEnabled, apis } — display/settings only; ignore pollLikesMs/pollSubsMs/pollMembersMs/pollQueueMs for overlay poll cadence
GET /api/your-slug/likes { likeCount, likeGoal, pollingIntervalMillis, paused?, awaitingLive?, pollingEnabled? }
GET /api/your-slug/members?pageToken=... { newMembers[{ id, displayName, profileImageUrl?, memberLevelName?, isUpgrade? }], nextPageToken, pollingIntervalMillis, paused?, awaitingLive? }
GET /api/your-slug/subs { subscriberCount, subsGained, subGoal, subsDisplayMode: "total"|"gained", pollingIntervalMillis, paused?, awaitingLive? }
GET /api/your-slug/queue { queueLength, queueFrozen, queue[{ position, displayName, avatarUrl? }], pollingIntervalMillis, paused?, awaitingBot?, subscriptionRequired?, discordNotLinked? }
GET /api/your-slug/on-air { onAir[{ displayName, avatarUrl?, durationMs?, isBypass? }], showHostOnOverlay, hideHostOnOverlay, showTimerOnOverlay, pollingIntervalMillis, paused?, awaitingBot? }
GET /api/your-slug/twitch-subs { subscriberCount, subCount, subsGained, subGoal, subsDisplayMode: "total"|"gained", pollingIntervalMillis, paused?, awaitingLive?, twitchRequired?, subscriptionRequired? }
GET /api/your-slug/twitch-goal { goalLabel, current, target, percent, pollingIntervalMillis, paused? }
GET /api/your-slug/twitch-subs-ticker { newMembers[{ displayName, profileImageUrl? }], nextPageToken?, pollingIntervalMillis, paused?, awaitingLive? }
GET /api/your-slug/twitch-followers { followCount, subscriberCount, subCount, subsGained, followsGained, subGoal, subsDisplayMode: "total"|"gained", pollingIntervalMillis, paused?, awaitingLive?, twitchRequired?, subscriptionRequired? } — same shape as twitch subs; do NOT use followerCount/followerGoal/displayMode
GET /api/your-slug/twitch-followers-ticker { newMembers[{ displayName, profileImageUrl? }], pollingIntervalMillis, paused?, awaitingLive? }
GET /api/your-slug/twitch-cheers { newMembers[{ displayName, bits?, message? }], pollingIntervalMillis, paused?, awaitingLive? }
GET /api/your-slug/twitch-raid { active, from, viewers, pollingIntervalMillis }
GET /api/your-slug/twitch-hype-train { active, level, progress, goal, percent, pollingIntervalMillis }