Skip to main content
Trace is the compliance and guardrails layer for your voice agents. Every scanned call gets a deterministic scorecard: which rules fired, which requirements were satisfied, what was redacted, and a verdict (PASS, WARN, FAIL), with plain-English reasons and cited regulations, sealed with a tamper-evident audit_hash. A second, asynchronous layer adds semantic findings (model-judged concerns deterministic rules can’t catch, like indirect opt-outs or hallucination-vs-knowledge-base); those are advisory and never block.
Trace is in beta and free during beta (metered, billed $0). It defaults to on, in warn mode, for every org, so calls are already being scored, this guide is about configuring it deliberately and reading the results. Findings are informational and not legal advice.
You need a key with trace:configure (to manage config and rule packs) and trace:read (to read results). Add scopes in the console.

Step 1, configure Trace

One PUT sets the org-wide default; add ?agent_id= (or wrap the body as { "agent_id", "config" }) to override per agent:
The response is the stored config with a content-addressed ETag, the runtime pins it, so a config change takes effect on the next pull. GET /v1/trace/config reads it back (omit agent_id for the org default).

Pick a mode

Every mode is fail-open: if anything in the pipeline errors, the call continues and the gap is recorded, compliance tooling never takes your agents down.

Step 2, know your rule packs

Built-in packs cover TCPA, HIPAA, PII, and brand voice. List what’s available (built-ins plus your tenant’s custom packs):
Pin a specific version in config with "tcpa": { "enabled": true, "version": "v3" }, or omit version to track the latest active. You can also upload your own pack in the Trace DSL (POST /v1/trace/rule-packs with pack_id, version, and rules[]); custom packs are scoped to your org and can never shadow a built-in.

Step 3, read the results

All four reads are cursor-paginated and newest-first. Exposure summary, the dashboard headline: interactions scanned, the share with a compliance gap, per-rule exposure ranking, and the verdict mix over a trailing window:
Interactions, one scorecard row per call. Filter by verdict (PASS/WARN/FAIL) or agent_id:
Interaction detail, the full evidence view for one call_id: findings with reasons and cited regulations, satisfied requirements, redactions, gate health, the verdict, and the tamper-evident audit_hash:
Violations, every fired rule across scorecards, for drill-down. Filter by rule_id, severity (low/medium/high/critical), or interaction_id:
Findings, the async semantic layer (advisory, kept separate from the hash-chained violations). Filter by check_id, action, or severity; the compliance-officer alerts feed is action=escalate and/or severity=critical:

The console view

The Compliance / Trace tab in the console renders the same data, Overview (exposure), Interactions (scorecards), and Alerts (escalated findings), no code required.

Metering

Trace meters trace.minutes, the scanned audio minutes of calls where Trace is enabled, on top of the underlying product’s own rate. During the beta it bills at $0. See pricing & metering.

Next steps

Trace API reference

Full request/response schemas for every /v1/trace/* endpoint.

Post-call extraction

Pull structured data out of completed calls.

Conversation intelligence

Recap: summaries and CRM sync for your calls.

Errors & limits

Error codes, pagination, and idempotency conventions.