Provider Health
Transparent per-provider health combining sentinel probes, circuit breakers, and key status.
Get provider health
/v1/health/providers
Per-provider breakdown combining three health signals:
- Sentinel probes — automated health checks every 30s
- Circuit breaker state — derived from real traffic failures
- BYOK key status — whether you have a key registered
Response
{
"providers": [
{
"id": "anthropic",
"sentinel": {
"status": "healthy",
"latency_ms": 234,
"last_probe_at": "2026-03-15T10:30:00.000Z"
},
"models": [
{ "id": "anthropic/claude-sonnet-4", "circuit": "closed", "routable": true },
{ "id": "anthropic/claude-haiku-4-5", "circuit": "closed", "routable": true },
{ "id": "anthropic/claude-opus-4", "circuit": "open", "routable": false }
],
"aggregate": {
"total_models": 26,
"routable_models": 24,
"circuit_open_count": 2,
"health": "degraded"
},
"has_key": true
}
],
"summary": {
"total_providers": 7,
"healthy": 5,
"degraded": 1,
"down": 1
}
}
Health states
| State | Meaning |
|---|---|
healthy | Sentinel OK, no circuit breakers open |
degraded | Sentinel OK but some circuit breakers open, or sentinel reports degraded |
down | Sentinel reports down or auth_error |
Authentication
Requires API key: Authorization: Bearer br_live_...
SDK Usage
// Provider health is available via the HTTP client
const res = await fetch("https://api.brainstormrouter.com/v1/health/providers", {
headers: { Authorization: `Bearer ${apiKey}` },
});
const health = await res.json();
console.log(`${health.summary.healthy} providers healthy`);
curl https://api.brainstormrouter.com/v1/health/providers \
-H "Authorization: Bearer br_live_..."