Search documentation

Search pages and headings

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/json

Request

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 the error strings; they are passed through from YouTube.
  • actions: 0 with ok: 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