Traces & request records
Every call through the gateway becomes an inspectable record — tokens, cost, latency, provider, guardrail results, cache and routing. Read it in the dashboard or pull it via the API.
The record
What every request record carries
Each request is stored as a trace/request record you can open in the dashboard (Observability → Requests) or fetch from the API. A single record includes:
| Field | Description |
|---|---|
| model, provider, provider_type | Model id, real provider brand, and provider_type (cloud_direct, bedrock, self_hosted…). |
| tokens_in / tokens_out / cached_tokens | Input, output, and cached token counts — always from the provider's usage, never a local estimate. |
| cost_usd, latency_ms, finish_reason | Cost in USD, wall-clock latency in milliseconds, and the completion finish reason. |
| cache_hit, routing_mode, region | Whether a cache was hit, the routing mode (realtime / batch / cached), and the processing region. |
| session_id, guardrails | The session id the call belongs to and the full guardrail result set (injection / PII / content / policy). |
Cost is shown in your account's display currency; per-request sub-cent costs render as "< $0.01" with the exact value on hover.
Zero-cost telemetry
Observe per-call without a second request
The same telemetry rides every completion response as the _anoman block plus X-Anoman-* transparency headers — so you can observe every call inline, with no follow-up API request.
{
"choices": [ ... ],
"usage": { "prompt_tokens": 1024, "completion_tokens": 256 },
"_anoman": {
"guardrails": {
"injection": { "status": "pass", "score": 0.12 },
"pii": { "status": "pass" },
"content": { "status": "pass" },
"policy": { "status": "pass" }
},
"routing": { "mode": "realtime", "region": "id", "provider_type": "cloud_direct" },
"cache": { "hit": false, "type": "none" },
"weighted_tokens": 1240,
"cost_usd": "0.0023"
}
}Streaming responses carry the same block in a final meta event before the stream closes — see Streaming for the wire format.
Traces API
List and inspect records
Use GET /anoman/v1/traces to list records (filter by model, region, or agent) and GET /anoman/v1/traces/{id} for a single record with its span timeline.
# List recent request records (filter by model / status / session)
curl "https://api.anoman.io/anoman/v1/traces?model=claude-sonnet-4-20250514®ion=id&limit=20" \
-H "Authorization: Bearer anm-sk-..."Sessions
Group requests into agent sessions
Requests that share a session_id (and an agent_id) are grouped into sessions. List sessions, open one for detail, or pull its actions to see the tool-call and guardrail-check timeline within that session.
# List agent sessions (group requests by session_id / agent_id)
curl "https://api.anoman.io/anoman/v1/sessions?agent_id=support-bot-v2&status=active" \
-H "Authorization: Bearer anm-sk-..."Retention
Where the data lives
Records are backed by the ClickHouse llm_requests table with 365-day retention. Older records age out automatically.