Observability
Per-request response headers, usage analytics, and the audit log. Trace any request, any time.
Response headers
Every response from /v1/chat/completions includes a set of x-conduix-* headers that explain exactly what happened.
- x-conduix-provider
- openai · anthropic · google · xai · deepseek · mistral · groq · together · fireworks · azurefoundry · bedrock · byo:<slug>
- x-conduix-model-served
- The actual model id used (may differ from request if a fallback fired)
- x-conduix-alias
- Present when you requested a routing alias (e.g. frontier-best) — shows which alias resolved
- x-conduix-model-remapped
- "old-id -> new-id" when a retired model id was transparently routed to its successor
- x-conduix-fallback
- "true" when the request fell over from your requested model
- x-conduix-cache
- HIT or MISS — present on cacheable requests (temperature=0, deterministic)
- x-conduix-latency-ms
- End-to-end latency in milliseconds
- x-conduix-request-id
- Trace this exact request in support tickets
curl -i https://api.conduix.ai/v1/chat/completions \
-H "Authorization: Bearer cx_live_…" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"hi"}]}' \
| grep -i ^x-conduixfrom openai import OpenAI
client = OpenAI(api_key="cx_live_…", base_url="https://api.conduix.ai/v1")
response = client.chat.completions.with_raw_response.create(
model="gpt-5.4-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print("provider: ", response.headers.get("x-conduix-provider"))
print("model served:", response.headers.get("x-conduix-model-served"))
print("latency: ", response.headers.get("x-conduix-latency-ms"), "ms")
parsed = response.parse()Usage analytics
The dashboard shows by-model breakdowns over any date range: /dashboard/usage. Each row carries the provider as a badge, total tokens, request count, and spend in credits.
For programmatic access, hit GET /api/usage?bucket=day with your dashboard JWT — returns the same data structured for charting.
Audit log
The audit log captures org-level events — logins, key creation/revocation, billing events, policy changes, member invites/removals. View at /dashboard/audit.
Request IDs
Every API response carries an x-conduix-request-id header (e.g. cx-req-abc123…). Include this id in support emails — it lets us pull the full request trace immediately. The same id appears in every log line tied to that request, server-side.
Errors
Conduix returns OpenAI-compatible error envelopes. Common codes:
- invalid_api_key
- Authorization header missing, malformed, or revoked
- rate_limit_exceeded
- Per-key RPM exceeded — check Retry-After
- insufficient_credits
- Top up the wallet
- spend_cap_exceeded
- Hard cap hit — request never reached upstream
- model_not_allowed
- Per-key allowlist blocks this model
- provider_unavailable
- All upstream providers in the chain failed
- upstream_error
- Generic upstream failure (rare — usually a provider 5xx)
SLA & uptime
Conduix routes around individual provider outages — when one provider trips its circuit breaker, traffic auto-fails over to the next entry in the chain. Customers don't see the failure. Custom SLAs available with Scale and Enterprise plans; talk to sales.

