Skip to content
Reference

Get started

Overview

Errors

Every status this kit returns, what causes it, and what to do about it.

Every status this kit returns, what causes it, and what to do. The rule behind the table: a failure that is somebody else's to fix says so in its status.

By status#

StatusWhereMeans
400control plane /tokenmissing room or identity, or an unknown role
400POST /public/avatarsno display_name, no consent, or an unsupported content_type
400webhookthe body is not JSON
401control plane, MCPwrong or missing UDK_SECRET
401/public/*the customer JWT is missing, expired or wrongly signed
401webhooksignature failed, or the digest does not match the body
401ingest, internal avatar routesthe shared secret does not match
404/public/calls/<id>, /public/avatars/<id>no such thing or not yours — deliberately identical
404/providers/avatar/<id>unknown provider id
409POST /public/avatars/<id>/uploadedthe object is not in storage yet. Recoverable
500webhookthe handler threw. Retry it — the upsert is idempotent
503control plane /tokenLIVEKIT_API_KEY / LIVEKIT_API_SECRET unset
503ingestLIVEGRID_INGEST_SECRET unset
503internal avatar routesLIVEGRID_RENDER_SECRET unset
503POST /public/avatarsstorage would not sign an upload URL

503 rather than 500 for an unset key is deliberate throughout: the service is fine, it is missing a dependency it cannot supply itself, and the two need different responses from whoever is paged.

404 for "not yours" is also deliberate. Distinguishing it from "no such id" tells an unauthorised caller which ids are real.

Failures with no status at all#

The expensive ones. Every item here returns 200 somewhere and is wrong.

SymptomCause
The agent joins and never speaksIts token was minted with the human role. Agent control rides the data channel; without canPublishData the messages are dropped silently
A call connects, no agent ever appearsNo worker registered under that agent_name, or none is running
The token mints, the browser never connectsThe client was given the control plane's URL instead of url from the mint response
A region silently does not existIts named key or secret is missing from the environment, so it was dropped from REGIONS_JSON without a warning. Check describe_call_config
A call exists with no transcriptNormal. The transcript is best-effort; the lifecycle row is authoritative
The console shows no live calls during an outageYou rendered reachable: false as count: 0
Every request to the control plane is authorisedUDK_SECRET is unset
An avatar is stuck on pendingThe browser took an upload ticket and never confirmed, or never PUT the file
Enrolment never startsLIVEGRID_RENDER_SECRET unset, so the GPU box cannot claim work
Renders are shipping unreviewedGOOGLE_API_KEY unset. Nothing is checking the motion

When something is wrong, in order#

  1. udk health. Is the media plane up at all.
  2. GET /health on the control plane. degraded names the media plane; ok clears it.
  3. describe_call_config. What the control plane actually loaded, rather than what you think you configured.
  4. get_call_status <room>. Who is in the room, and whether the agent is one of them.
  5. GET /public/calls/<id>. What was recorded, after the fact.

The order is by cost. Step 1 answers in under a second and rules out the cause of most early failures; step 5 needs the call to have finished.