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 · groq · together · mistral · deepseek · fireworks · byo:<slug>
x-conduix-model-served
The actual model id used (may differ from request if a fallback fired)
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
Reading headers — curl
curl -i https://api.conduix.ai/v1/chat/completions \
  -H "Authorization: Bearer cx_live_…" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"hi"}]}' \
  | grep -i ^x-conduix
Reading headers — Python OpenAI SDK
from 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-4o-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.

Heads up. The audit log is for org events, not individual LLM requests. For per-request observability use the response headers above and /dashboard/usage.

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.