Skip to main content

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.

Enter a Twitch handle below to see live status.
One handle = single badge. Up to 25 handles separated by commas / spaces / newlines = grid mode.
OBS / Discord embed ready

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.

Image

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 our og:image meta 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=1 to 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.

Frequently asked

How is the live status fetched?
The widget calls Streamrise's server proxy that hits Twitch Helix /streams (or Kick's /api/v2/channels for Kick handles). Helix is the official, public Twitch API. We use a server-side client_credentials token, so no viewer auth is required and there's no rate-limit charge against your channel.
How fast does it update?
Default 30 seconds; configurable down to 15 seconds. Twitch Helix lags real live state by 1-3 minutes (Twitch's own cache), so polling faster than 15 seconds doesn't help.
Can I embed this on my own website?
Yes. Use the Copy embed button to copy an iframe snippet, or paste the embed URL into any HTML container. The badge styles itself with a transparent background that blends with light or dark sites.
Does it work for Kick channels?
Yes. Toggle the Platform switch to Kick. We hit Kick's public /api/v2/channels/{slug} endpoint server-side; the response shape is mapped to the same badge format used for Twitch. Note that Kick sits behind Cloudflare and may occasionally 403 from data-center egress IPs; if your widget shows "Kick API blocked", it's an upstream Cloudflare check, not a Streamrise issue.
Can I show multiple channels at once?
Yes. 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). One Helix call covers all 25, with the same edge-cache and refresh interval.
Why does Discord show an image when I paste the page URL?
The page sets og:image to /_api/twitch/live-status.png?login=<handle>, which renders a fresh PNG of the badge each request. Discord, Twitter/X, Slack, and Telegram unfurl images inline, so the link previews as the live badge instead of a generic page card.
Is there a rate limit?
Helix allows 800 points/minute per app token. Each /streams call costs 1 point regardless of how many channels you query, so a 30-second refresh on a 25-channel grid is 2 calls/min, well under the limit. Edge cache absorbs duplicate requests across viewers.
Why no EventSub push notifications?
EventSub requires per-channel webhook subscriptions, signature verification, and re-sub handling on 410. For a 30-second poll badge, the engineering cost outweighs the gain. Helix lags real go-live by 1-3 minutes anyway, so EventSub's push advantage shrinks to ~30s in practice. We may wire EventSub for paying-customer alerts later, but the free embed stays poll-based.