Twitch profile
Sample profile responses are available. Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Request
POST /api/v1/profiles · authenticate with the x-api-key header.
| Parameter | Type | Required | Description |
|---|---|---|---|
platform | string | Yes | "twitch" |
handle | string | Yes | Channel login name. |
mode | string | No | "live" for real data, "demo" for a free labeled sample. Default "demo". |
freshness | string | No | Oldest cached result you accept: "1h", "24h" (default), "7d", or "live" to force a refresh. |
curl "$SIGNALSHELF_BASE_URL/api/v1/profiles" \
-H "Content-Type: application/json" \
-H "x-api-key: $SIGNALSHELF_API_KEY" \
--data '{"platform":"twitch","handle":"shroud","mode":"demo","freshness":"24h"}'const response = await fetch(`${process.env.SIGNALSHELF_BASE_URL}/api/v1/profiles`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.SIGNALSHELF_API_KEY },
body: JSON.stringify({platform: "twitch", handle: "shroud", mode: "demo", freshness: "24h"}),
});
const { data, meta } = await response.json();import os, requests
response = requests.post(
f"{os.environ['SIGNALSHELF_BASE_URL']}/api/v1/profiles",
headers={"x-api-key": os.environ["SIGNALSHELF_API_KEY"]},
json={"platform":"twitch","handle":"shroud","mode":"demo","freshness":"24h"},
timeout=30,
)
data = response.json()["data"]Example response
Labeled sample fixture. Values are illustrative and do not describe a real creator.
{
"data": {
"platform": "twitch",
"handle": "shroud",
"name": "Sample creator",
"bio": "Illustrative sample data for exploring SignalShelf. Not a real profile lookup.",
"followers": 128400,
"following": 842,
"posts": 326,
"verified": false,
"url": "https://www.twitch.tv/shroud",
"avatar": null,
"sample": true,
"provider": "sample-fixture",
"details": {
"is_partner": false,
"is_affiliate": false,
"banner_url": null,
"is_live": false,
"stream": {},
"last_broadcast": null
}
},
"meta": {
"event_id": "sample",
"mode": "demo",
"cache": "SAMPLE",
"credits_charged": 0,
"fetched_at": null,
"age_seconds": null,
"duration_ms": 0
}
}Profile fields
Every platform returns these fields. Fields a platform does not expose are null (or [] for links); they are never guessed.
| Field | Type | Description |
|---|---|---|
platform | string | Platform you requested. |
handle | string | Normalized handle (lowercase, no @). |
name | string | Display name. |
bio | string | Profile description, as shown publicly. |
followers | number | Follower or subscriber count. |
following | number | Accounts this profile follows. |
posts | number | Total posts, videos, pins or repositories, depending on platform. |
verified | boolean | Platform verification badge, when exposed. |
url | string | Canonical public profile URL. |
avatar | string | null | Profile picture URL (largest available). |
sample | boolean | Always false for live data; true only in sample mode. |
provider | string | Engine that produced the data. |
details | object | Platform-specific fields, listed below. |
Twitch-specific fields (details)
Returned inside data.details.
| Field | Type | Description |
|---|---|---|
details.is_partner | boolean | Twitch partner (also mapped to verified). |
details.is_affiliate | boolean | Twitch affiliate. |
details.banner_url | string | null | Channel banner URL. |
details.is_live | boolean | Currently streaming. |
details.stream | object | Live stream { title, viewers, started_at, game } or null. |
details.last_broadcast | string | null | Most recent broadcast { title, started_at, game }. |
Response metadata
| Field | Type | Description |
|---|---|---|
meta.cache | string | HIT (served from cache, 0 credits), MISS (fresh fetch) or SAMPLE. |
meta.credits_charged | number | Credits charged for this request. |
meta.fetched_at | string | When the data was fetched from the source. |
meta.age_seconds | number | Age of the data at response time. |
meta.duration_ms | number | Server processing time. |
Errors
Every failure is free: reserved credits are refunded automatically.
| Field | Type | Description |
|---|---|---|
404 PROFILE_NOT_FOUND | error | The profile does not exist publicly. |
422 PROFILE_UNAVAILABLE | error | The source did not expose even the public profile fields for this account. |
503 SOURCE_NOT_AUTHORIZED | error | Live access for this platform is disabled in production pending source authorization. No credits are charged. |
503 SOURCE_AUTH_REQUIRED | error | The source demanded a login for this request. Retry later. |
503 UPSTREAM_RATE_LIMITED | error | The source is rate limiting. Retry after the Retry-After header. |
402 INSUFFICIENT_CREDITS | error | Not enough credits for a fresh lookup. Cached and sample results stay free. |
Limitations
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Selling or redistributing Twitch API metadata requires a separate written agreement.
Twitch live profile and schedule requests are disabled in production. Twitch’s Developer Services Agreement bars selling, licensing, or redistributing Twitch API data without separate written permission.
Local parser tests and successful page reads do not grant permission to commercialize a source method.
Following and video counts are not returned.