My data isn’t showing up in the dashboard
calado batches events in memory and only sends them when either the batch size or the flush interval is reached. In low-traffic or serverless setups, data can sit in the queue longer than you expect. Try this first:status() returns:
queued > 0andlastIngestAtis null → transport hasn’t sent yet. Callflush().lastErroris set → inspect it. Often a 4xx from a malformed payload.enabled: false→ transport is disabled. See the 401 section below.
I’m getting 401 errors
calado auto-disables the transport after three consecutive 401 responses to stop filling your logs with noise. Fix:- Check your API key. It must start with
cl_and match an agent you own. - Confirm
CALADO_API_KEYis actually populated in the runtime environment. In serverless setups, env vars don’t always inherit the way you expect. - Re-run
calado.init(process.env.CALADO_API_KEY!)with the corrected key. This resets the disabled state.
status().enabled is false and I haven’t changed anything
Three consecutive 401s in a row will flip it. Check consecutive401s on the status output to confirm.
Re-initialize with a valid key to recover. There’s no other way to re-enable.
Conversations are showing up, but they’re all single-turn
You’re missing conversation context. Each call to your wrapped client is one turn. Without grouping, calado can’t tell that multiple turns belong together. See Node.js SDK → Conversation tracking for the fix.Dashboard is empty after a fresh ingest
Raw conversations appear in the dashboard immediately after ingest, but analysis doesn’t start automatically. Calado only runs classification when you click Run Analysis on the agent page.- Open your agent in the dashboard and confirm your conversations are listed (they’ll show as
pendingclassification). - Click Run Analysis on the agent page to start Stage 0 / Stage 1 classification.
- Analysis runs in the background and takes minutes, not seconds. Findings appear once there’s enough data to group.
pending or running, wait. If it’s failed, the error detail is on the run page.
Re-run analysis after ingesting new conversations or editing agent definitions to re-classify.
Wrapping doesn’t return a proxy
calado.wrap(client) detects Anthropic and OpenAI clients by looking for client.messages.create (Anthropic) or client.chat.completions.create (OpenAI). If your client doesn’t match, wrap returns the client unchanged and calado never captures its calls.
Common causes:
- The client was instantiated before
calado.init(). calado’s wrap uses the state set up by init; call them in order. - You’re using a library that wraps Anthropic or OpenAI but exposes a different surface. In that case, call the underlying Anthropic or OpenAI client directly and wrap that.
Everything works locally but not in production
In serverless runtimes, the 5-second flush timer often doesn’t fire before the function freezes. Your events get stranded in a queue that dies with the function. See Serverless patterns for the fix. Short version: callawait calado.flush() (or hand it to waitUntil / after) before your handler returns.
I need to fully disable calado in tests
Don’t callcalado.init() in your test environment. The SDK’s wrap() returns the client unchanged when the SDK hasn’t been initialized, so your LLM calls keep working and nothing is sent anywhere.
For explicit teardown after initialization:
My Langfuse or LangSmith webhook isn’t delivering anything
The most common cause is a missing trigger. A webhook URL alone never fires. Langfuse needs a trigger on Trace finished; LangSmith needs an Automation rule that matches your runs. Both default to firing on nothing. If the webhook does fire but calado rejects it:401— the bearer token was rejected. Re-paste yourcl_key into the tracer’s webhook header. The usual cause is a stray space or a missingBearerprefix.400 too_many_child_runs— one trace exceeded the per-trace cap (950 observations for Langfuse, 950 runs pertrace_idfor LangSmith). Reduce trace verbosity or split long work into shorter sessions.
Still stuck?
Email support@calado.ai with:- The output of
calado.status() - Your SDK version (
npm ls calado) - The runtime (Node version, Vercel / Lambda / bare metal)
- A minimal reproduction if possible