API Reference
Errors
API error codes and response format
Error Response Format
All API errors follow a consistent format:
{
"error": {
"message": "Human-readable error description",
"type": "error_type",
"code": "error_code"
}
}Some endpoints return a simplified format:
{
"error": "Human-readable error description"
}HTTP Status Codes
| Status | Meaning | Common Cause |
|---|---|---|
400 | Bad Request | Missing or invalid parameters |
401 | Unauthorized | Missing, invalid, or expired API key |
404 | Not Found | Resource doesn't exist or model not found |
413 | Payload Too Large | File exceeds size limit or storage quota exceeded |
429 | Too Many Requests | Rate limit exceeded |
502 | Bad Gateway | Upstream provider returned an error |
503 | Service Unavailable | Provider temporarily unavailable or not configured |
Error Types
invalid_request_error
The request was malformed or missing required fields.
{
"error": {
"message": "model, max_tokens, and messages are required",
"type": "invalid_request_error",
"code": "invalid_request"
}
}server_error
An internal error occurred on the Router9 side.
{
"error": {
"message": "Web search is not configured on this server",
"type": "server_error",
"code": "search_not_configured"
}
}upstream_error
The upstream LLM provider returned an error.
{
"error": {
"message": "Upstream provider error: rate limited",
"type": "upstream_error",
"code": "provider_error"
}
}Authentication Errors
| Error Message | Cause | Fix |
|---|---|---|
Missing authorization header | No API key provided | Add Authorization: Bearer sk-r9k-... header |
Invalid API key | Key doesn't exist or was deactivated | Check key or regenerate in dashboard |
API key expired | Key passed its expiration date | Regenerate a new key |
Rate Limit Errors
{
"error": "4-hour rate limit exceeded. Resets at 2025-04-06T16:00:00Z"
}See Rate Limiting for details on quotas and the Retry-After header.