API Reference
POST /v1/probe
Diagnose a video by trying every innertube client and endpoint combination and reporting what worked.
A diagnostic endpoint. It bootstraps a session, then tries every innertube client against both endpoints with that session's token and reports the outcome of each attempt.
Reach for it when a video returns no messages and you want to know whether the problem is the video, the token, or the client selection.
POST /v1/probe
Content-Type: application/jsonRequest
| Field | Type | Required | Description |
|---|---|---|---|
videoId |
string |
yes | A full YouTube URL or a bare 11-character video id |
{ "videoId": "zvwJ29RFVww" }Response
| Field | Type | Description |
|---|---|---|
videoId |
string |
The resolved id |
rows |
ProbeRow[] |
One row per client × endpoint attempt |
Each row:
| Field | Type | Description |
|---|---|---|
label |
string |
The client label, e.g. WEB, ANDROID, WEB_REMIX (music) |
endpoint |
string |
get_live_chat or get_live_chat_replay |
ok |
boolean |
Whether the attempt returned a parseable chat response |
actions |
number |
How many raw chat actions came back (0 when ok is false) |
error |
string | null |
The upstream failure message, or null on success |
{
"videoId": "zvwJ29RFVww",
"rows": [
{ "label": "MWEB", "endpoint": "get_live_chat", "ok": true, "actions": 12, "error": null },
{ "label": "MWEB", "endpoint": "get_live_chat_replay", "ok": false, "actions": 0, "error": "..." },
{ "label": "WEB", "endpoint": "get_live_chat", "ok": true, "actions": 12, "error": null },
{ "label": "ANDROID", "endpoint": "get_live_chat", "ok": false, "actions": 0, "error": "..." }
]
}Which clients are tried
Twelve client configurations are attempted, each against both endpoints — so a complete probe is 24 upstream requests:
MWEB, WEB, ANDROID, IOS, TVHTML5,
TVHTML5_SIMPLY_EMBEDDED_PLAYER, WEB_EMBEDDED_PLAYER,
ANDROID_EMBEDDED_PLAYER, WEB_REMIX (music), MWEB (music),
MWEB (m.youtube), ANDROID_VR.
Three of them talk to hosts other than www.youtube.com: the two (music)
entries use music.youtube.com and MWEB (m.youtube) uses m.youtube.com.
Note that a normal /v1/sessions call is far more
selective — it only ever tries WEB and then TVHTML5. Probe therefore
routinely shows working combinations that the session endpoint will never
choose.
Reading the result
- Several rows
ok: true— the video is fine and readable. If a normal session still fails, the problem is elsewhere. - Every row
ok: false— the token itself is being rejected, or the video has no readable chat. Check theerrorstrings; they are passed through from YouTube. actions: 0withok: true— the combination works but nothing has been said recently. That is a healthy quiet stream, not a failure.
Cost
Probe is slow and chatty by design: one session bootstrap plus 24 sequential upstream requests. It is a debugging tool, not something to call on a schedule.
Errors
Probe shares the bootstrap errors of /v1/sessions,
since it acquires a session first. Individual attempt failures are not
errors — they are reported in the error field of their row with ok: false.
| Status | Code | Cause |
|---|---|---|
400 |
INVALID_REQUEST |
Body failed schema validation |
400 |
INVALID_VIDEO_ID |
videoId could not be parsed |
404 |
NO_LIVE_CHAT |
No chat renderer with a continuation token was found |
502 |
SW_JS_FAILED |
Could not read credentials from sw.js |