Live Status Tracker New
Drop in a Twitch handle, get a live-status badge that updates every 30 seconds. Copy the embed URL into Discord or your website to show "live now" auto-magically.
Status fetched from Twitch Helix and Kick public API via Streamrise — no viewer auth, no analytics tracking.
The embed URL renders just the badge above with a transparent background. Drop it into an OBS Browser Source (suggested 320×120) or paste it into Discord — pasting the page URL into Discord unfurls the badge as an image card via og:image. Refresh interval: 30s.
How the badge fetches state
On every refresh tick the widget calls /_api/twitch/live-status?login=... (or /_api/kick/live-status for Kick handles). The Twitch route hits Helix /users plus /streams with a server-side client_credentials token: no viewer auth, no rate-limit charge against your channel. The Kick route hits /api/v2/channels/{slug}, which is the same JSON endpoint Kick's web app uses internally. Both responses are cached at the edge for 30 seconds with a 60-second stale-while-revalidate window, so a thousand viewers polling the same handle cost ~one upstream call per 30s.
Helix lags real go-live state by 1-3 minutes. That's Twitch's own cache, not ours. Polling faster than the documented 15-second floor doesn't help; you'll just see the same stale value more often. The Kick endpoint updates closer to real time but is rate-limited per IP, so the same 30-second floor applies in practice.
Multi-channel grid for teams and orgs
Paste up to 25 handles separated by commas, spaces, or newlines and the widget switches to a sortable grid: live channels first, ordered by viewer count, with offline tiles greyed out below. One Helix call covers all 25 (Helix accepts up to 100 user_login params per request) so the request budget is identical to single-channel mode. The grid is the right layout for tournament organisers, multi-streamer collectives, or a "who's live in the org right now" page on your site.
Embed in OBS: exact pixel sizes
In OBS, add a Browser Source pointing at the embed URL (the Copy embed button gives you the exact value). Recommended dimensions: 320×120 for single-channel mode, 640×320 for a 25-handle grid. The widget renders with a transparent background. Set the OBS source to "Transparent background" and it composites cleanly over your scene without a coloured box. Auto-refresh inside the Browser Source uses the interval you set in the panel; OBS does not need to reload the source for new state.
Embed in Discord: image vs page-link unfurl
Discord doesn't unfurl iframes, but it auto-unfurls images and Open Graph cards. Two paths:
- Direct image: paste
https://stream-rise.com/_api/twitch/live-status.png?login=<handle>into Discord. Discord renders it as an inline image, refreshing whenever Discord's CDN re-fetches the URL (typically after a few hours). Useful for permanent "is X live?" posts in a server's announcements channel. - Page link: paste the full
/live-status-tracker?...URL. Discord pulls ourog:imagemeta tag, which points at the same PNG endpoint with the user's handle stamped in. Same render, but the unfurl card carries the page title and description too.
Embed on a website: iframe paste-in
The Copy iframe button gives you an iframe snippet sized to the layout you've selected. The embed page strips its hero and FAQ in ?embed=1 mode, so the iframe contents fit edge-to-edge. Useful for WordPress block embeds, Webflow's HTML Embed component, or a raw <iframe> tag in any static site. The iframe inherits the parent's background (we ship transparent), so the badge looks native on light and dark themes.
Kick channels: same input, different endpoint
Toggle the Platform switch to Kick and the same input now hits Kick's public /api/v2/channels/{slug} route. We map the livestream object to the same response shape used for Twitch, so the badge renders identically: display name, avatar, live pill, viewer count, and current category. Kick sits behind Cloudflare, which occasionally flags requests from data-center egress IPs; in that case the badge shows "Kick API blocked" rather than hanging or returning a stale value.
Customisation reference
- Theme: Twitch (purple), Kick green, or Minimal (no accent). Pure CSS, no JS toggle cost.
- Refresh interval: 15-600 seconds. Default 30s. Lower than 15s gates at the upstream cache; higher than 60s saves nothing visible to viewers.
- Live thumbnail: single-channel mode only. Twitch's CDN URL is bucketed at 30 seconds so the browser cache doesn't get blown on every poll.
- Embed mode: append
?embed=1to strip the hero / FAQ / settings panel; the result is just the badge or grid, transparent background.
For deeper context, see the Twitch Growth Calculator and the Channel Audit tool. To break a cold-start when CCV stalls, the Twitch Viewers service lands you in the visible top of your category long enough for organic discovery to take over.