Errors
All errors share one shape, regardless of which provider failed:
{ "error": { "code": "all_providers_failed", "message": "All providers failed for search", "attempted": [ { "provider": "serper", "status": "timeout", "latency_ms": 10000 }, { "provider": "brave", "status": "rate_limited", "latency_ms": 220 } ] }}| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Request body failed validation (message has details) |
| 401 | unauthorized | Missing or invalid API key |
| 402 | insufficient_credits | Balance exhausted — top up in the dashboard |
| 404 | not_found | Unknown route or tool category |
| 429 | rate_limited | Per-key rate limit exceeded |
| 502 | all_providers_failed | Every candidate provider failed (never billed) |
| 500 | internal_error | Our fault — retry, and tell us if it persists |
Failed calls are never charged.