anoman
Observability

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:

FieldDescription
model, provider, provider_typeModel id, real provider brand, and provider_type (cloud_direct, bedrock, self_hosted…).
tokens_in / tokens_out / cached_tokensInput, output, and cached token counts — always from the provider's usage, never a local estimate.
cost_usd, latency_ms, finish_reasonCost in USD, wall-clock latency in milliseconds, and the completion finish reason.
cache_hit, routing_mode, regionWhether a cache was hit, the routing mode (realtime / batch / cached), and the processing region.
session_id, guardrailsThe 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&region=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.

Related: For rolled-up spend and quota, see Usage & Costs. For the same events as they happen, see the Live Feed.

See every call

Open the Requests view and inspect any trace end to end.