Runnable Catalog
Models that will actually work right now — filtered by health, keys, and budget.
List runnable models
/v1/catalog/runnable
Returns only models guaranteed to succeed if called. Filters the full catalog by:
- Circuit breaker — excludes models where all endpoints are tripped
- Sentinel health — excludes providers marked down or auth_error
- BYOK keys — excludes providers without an API key (env or tenant)
- Budget — excludes models when budget is exhausted
The filtered_out object tells you exactly why models were removed.
Response
{
"object": "list",
"data": [
{
"id": "anthropic/claude-sonnet-4",
"object": "model",
"owned_by": "anthropic",
"x_model_router": {
"pricing": { "input": 3, "output": 15 },
"capabilities": ["tools", "streaming", "vision"],
"endpoints": 1
}
}
],
"filtered_out": {
"circuit_open": 2,
"no_provider_key": 45,
"sentinel_down": 0,
"budget_exhausted": 0
},
"total_available": 308,
"total_filtered": 47
}
Difference from /v1/models
| Feature | /v1/models | /v1/catalog/runnable |
|---|---|---|
| Circuit-open models | Excluded by default (opt-in via ?includeUnhealthy=true) | Always excluded |
| Sentinel-down providers | Included | Excluded |
| Missing BYOK keys | Included | Excluded |
| Budget-exhausted | Included | Excluded |
| Filter breakdown | Not provided | filtered_out counts |
Use /v1/models to see everything discovered. Use /v1/catalog/runnable to see what will actually work.
Authentication
Requires API key: Authorization: Bearer br_live_...
SDK Usage
const runnable = await client.runnable.list();
console.log(`${runnable.total_available} models ready`);
if (runnable.filtered_out.no_provider_key > 0) {
console.log("Register provider keys to unlock more models");
}
runnable = client.runnable.list()
print(f"{runnable['total_available']} models ready")
curl https://api.brainstormrouter.com/v1/catalog/runnable \
-H "Authorization: Bearer br_live_..."