| Symptom | Likely cause | Section |
|---|---|---|
| Traces aren’t appearing in the dashboard | Missing key, wrong base URL, no framework flag, unflushed buffer, wrong workspace | Traces aren’t appearing |
401 Unauthorized on every request | Key missing, malformed, or expired | 401 Unauthorized |
402 Payment Required | Plan quota exhausted | 402 Payment Required |
409 Conflict on skill sync or registry install | Resource already exists (idempotent) — safe to ignore | 409 Conflict |
429 Too Many Requests | Per-plan rate limit | 429 Too Many Requests |
| Traces appear but no evaluation / verdict | No eval policy, silent check failure, or worker lag | No evaluation / verdict |
| regression-check says “no manifest” | Manifest not registered for this agent + ref | Manifest not registered |
| SDK is blocking my agent / requests are slow | Client re-created in hot path, or stale SDK | SDK is blocking my agent |
| Multi-agent traces aren’t linking | parent_trace_id not propagated | Multi-agent traces |
| Webhooks aren’t firing | Bad URL, event disabled, slow handler | Webhooks aren’t firing |
My traces aren't appearing in the dashboard
My traces aren't appearing in the dashboard
Most often one of:
-
DECIMAL_API_KEYis missing or wrong. Confirm withecho $DECIMAL_API_KEY— it should start withdai_sk_. If you’re using.envfiles, make sure they’re loaded beforedecimalai.init(). -
Wrong base URL. If you’re self-hosting or pointing at staging, set
DECIMAL_BASE_URLexplicitly: -
Framework flag missing.
decimalai.init(api_key="...")alone doesn’t capture traces — you also need a framework flag:See Tracing for the full matrix. -
Process exited before flush. The SDK buffers traces and flushes on a background timer. An
atexithandler drains the buffer on normal interpreter shutdown, so most short-lived scripts are covered automatically. The gap is processes that are hard-killed (SIGKILL,os._exit(), a crash) beforeatexitruns. For those, flush explicitly before exit: -
Wrong workspace. SDK traces are routed by the API key you send them with — and, if set, the
projectyou pass toinit()(sent as theX-Decimal-Projectheader). There is noteam=parameter orDECIMAL_TEAMenv var. Confirm the dashboard’s active workspace matches the key, and that anydecimalai.init(project="...")value is the one you expect. See Teams & Workspaces for how routing resolves.
401 Unauthorized
401 Unauthorized
402 Payment Required
402 Payment Required
You’ve hit your plan’s quota — usually traces ingested per month or SFT rows generated.The Either:
detail field names the exhausted metric:- Wait for the next billing period (resets at month boundary).
- Upgrade in Settings → Billing.
409 Conflict on skill sync or registry install
409 Conflict on skill sync or registry install
This is safe to ignore — it means the resource already exists in an equivalent state.
- Skill sync 409: the body hash already matches an existing version. No new version was created.
- Registry install 409: you’ve already installed this skill in this org.
429 Too Many Requests
429 Too Many Requests
You’re hitting the per-plan rate limit. Responses include The SDK respects this automatically. If you’re calling the API directly, sleep for the indicated seconds.To reduce request count, send traces in batches instead of one-at-a-time. The SDK automatically batches when buffer thresholds are hit. For direct API use, hit
Retry-After:POST /api/v1/traces/batch with up to 100 traces per call.See Errors for the full rate limit table.I see traces but no evaluation / verdict
I see traces but no evaluation / verdict
Evaluations run asynchronously by default. After ingest:
- Background eval worker scores each trace against the active policy.
- Decision engine computes a unified verdict (
pass/fail/review).
- No evaluators configured for the agent. Attach one from the Evaluate dashboard’s Auto-Scoring panel, or register evaluators via
/api/v1/evaluators. - Custom eval check failed silently. Check the trace detail page → “Eval Errors” section.
- Background worker hasn’t caught up. New traces typically score within 30s. Refresh the dashboard.
Manifest not registered — regression-check action says "no manifest"
Manifest not registered — regression-check action says "no manifest"
The GitHub Action looks up the manifest by
agent_name + the git ref it’s running against. If the manifest hasn’t been registered, the action skips the check.Fix: run scripts/init_for_decimal.py (or your equivalent) with DECIMALAI_MODE=manifest_only as a step before decimal-labs/regression-check@v1:manifest_only mode runs the manifest-extraction code path without actually invoking your agent.SDK is blocking my agent / requests are slow
SDK is blocking my agent / requests are slow
The SDK ingests traces in a background thread by default — the request path should never block on network I/O. If you’re seeing latency added to your agent:
- Make sure you call
decimalai.init()once at startup and reuse it — don’t construct new clients in hot paths. - Confirm you’re on a current SDK (
pip install -U decimalai); background flush has been the default for a long time.
Multi-agent traces aren't linking together
Multi-agent traces aren't linking together
For parent-child agent calls to show up as a tree, the parent must propagate the The platform displays the tree as long as
trace_id:If you’re using LangGraph, CrewAI, or the OpenAI Agents SDK, parent–child linkage happens automatically — just verify the framework flag is set on decimalai.init(). For custom orchestrators, capture the parent’s trace ID and pass it to the child’s parent_trace_id:parent_trace_id is set on the child trace.Webhooks aren't firing
Webhooks aren't firing
- Confirm the URL.
curl -X POST <your-url>from your terminal — does the endpoint accept the request? - Confirm the event is enabled. Settings → Notifications → Enabled events.
- 5-second per-attempt timeout. A handler that takes longer than 5 seconds counts as a failed attempt. Acknowledge fast (return
200), then process asynchronously. - Failed deliveries are retried with backoff, so a transient outage self-heals — but make your handler idempotent (deduplicate on the
X-Decimal-Event-Idheader) so a redelivered event isn’t processed twice. See Webhooks for signing and retry detail.
Related reading
Tracing
How auto-detection picks up your framework, how spans are stitched together, and what you can override.
Manifests
The capability matrix per framework — useful when “my tools/prompts aren’t being captured” is the actual problem.
Errors
Full list of error codes the API can return, and what each one means.
Webhooks
Delivery semantics, HMAC signing, and retry — read this first if webhooks aren’t firing.
Still stuck?
- Email support@decimal.ai with your
X-Request-IDfor any 5xx errors.