Authentication
All API requests require authentication via an API key.
Bearer Token
For the /v1/chat/completions, /v1/models, and /v1/embeddings endpoints, authenticate using the Authorization: Bearer header.
Authorization: Bearer rh_your_api_key_hereAnthropic-style Auth
For the /v1/messages endpoint, authenticate using the x-api-key header. The standard Bearer token also works on this endpoint.
x-api-key: rh_your_api_key_hereRequired Headers
Each endpoint requires specific headers for authentication and content negotiation.
| Endpoint | Required Headers |
|---|---|
| POST /v1/chat/completions | Authorization, Content-Type: application/json |
| POST /v1/messages | x-api-key, anthropic-version: 2023-06-01, Content-Type: application/json |
| GET /v1/models | Authorization |
| POST /v1/embeddings | Authorization, Content-Type: application/json |
SDK Configuration
Configure your preferred SDK or HTTP client to authenticate with RouterHub.
curl https://api.routerhub.ai/v1/chat/completions \
-H "Authorization: Bearer $ROUTERHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "anthropic/claude-sonnet-4", "messages": [{"role": "user", "content": "Hi"}]}'from openai import OpenAI
client = OpenAI(
base_url="https://api.routerhub.ai/v1",
api_key="YOUR_API_KEY",
)from anthropic import Anthropic
client = Anthropic(
base_url="https://api.routerhub.ai",
api_key="YOUR_API_KEY",
)from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://api.routerhub.ai/v1",
api_key="YOUR_API_KEY",
model="anthropic/claude-sonnet-4",
)Rate Limiting
RouterHub enforces cascading rate limits at three levels: api_key, project, and organization.
- Both RPM (requests per minute) and TPM (tokens per minute) are tracked.
- If any entity in the cascade exceeds its limit, the request is denied.
- Rate limit headers are returned in responses.
Rate limits are applied per API key, with optional overrides at the project and organization level.
Error Responses
Authentication and rate limiting errors are returned in standard OpenAI error format.
401 Unauthorized
{
"error": {
"message": "Invalid API key",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}429 Rate Limited
{
"error": {
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}503 Service Unavailable
{
"error": {
"message": "Auth service temporarily unavailable",
"type": "server_error",
"code": "service_unavailable"
}
}