Read-only endpoints that answer three questions without asking us: what's routed, is anything broken, and which workloads are affected. Designed to be agent-callable with your normal sk_* key.
GET /admin/v1/orgs/:org_id/projects/:project_id/routing-status
Per-workload routing topology for the project. Shows which workloads route through Understudy, at what traffic percentage, and which provider/model is active.
Legacy enum (kept for compatibility; prefer workload-status): primary — 100% of matching traffic routes through Understudy. understudy — a partial canary split (1–99%). passthrough — no Understudy route; models served as requested.
active_traffic_pct
0–100. The percentage of matching requests routed to the managed model.
provider_label
Where the route is served: anthropic or openai for frontier-API routes, managed for routes served by Understudy's serving infrastructure. null when passthrough.
model
The model id the route targets. Managed routes report understudy-managed until catalog ids land. null when passthrough.
GET /admin/v1/orgs/:org_id/projects/:project_id/status
One dense summary combining routing topology and recent health. Returns human-readable lines alongside the full structured data.
response shape
{
"project_id": "proj_...",
"lines": [
"chat: 30% routed through Understudy / managed (understudy-managed)",
" Last 30m: 11 provider 500s, 1.83% error rate",
"automation: primary — models served as requested"
],
"routing": { ... }, // full routing-status response
"health": { ... }, // full provider-health response
"generated_at": "2026-06-30T18:30:00.000Z"
}
The lines array is the quick answer — print it as-is for a human or feed it to an agent. The nested routing and health objects carry the same structured data as the individual endpoints.
The optional ?window= param works the same as on provider-health (default 30m, max 24h).
GET /admin/v1/orgs/:org_id/projects/:project_id/workload-status?window=24h
One row per workload: your declared routing config joined server-side with observed traffic. Replaces reconciling routing-status against provider-health by hand. Default window 24h, max 24h.
healthy — traffic flowing, 5xx rate under 5%. degraded — 5xx rate at or above 5% over the window. idle — configured but no traffic in the window.
mode
Observed provider label (dominant when traffic is mixed). Compare against declared to spot drift — e.g. a flag that isn't actually sending traffic.
declared
Your configured route: pin (routed to a specific deployment), steer (routed to a model), or none — no Understudy route, traffic is primary (models served as requested). split_pct is the traffic dial.
route_shares
Observed shares by route outcome, matching the per-request x-understudy-route header: primary — your requested model served, no route fired; understudy — an Understudy route moved the traffic; fallback — recovery re-issue of your original model after a failed understudy route.
rerouted_pct
Share of requests moved by an Understudy-configured route (equals route_shares.understudy; kept as its own field for convenience). The number to watch during a model cutover or canary ramp. Picking a catalog model by name is not rerouting — that traffic stays primary.
GET /admin/v1/orgs/:org_id/projects/:project_id/usage-summary?window=7d&group_by=workload,day
Aggregate token, cost, cache, and error rollups. Longer windows than the other endpoints (default 7d, max 30d) because it returns aggregates only — no per-request ids.
param
default
details
window
7d
Lookback window. Accepts m/h/d units, up to 30d.
group_by
workload
Comma-separated subset of workload, model, day. Anything else is a 400.
cache_read_pctis the share of prompt tokens served from cache — the "savings this week" number. customer_cost_usd is what the traffic cost you over the group, from the same records that drive billing.