ReferenceREST API

REST API

Endpoints, headers, request and response shapes — OpenAI-compatible.

Base URL: https://api.cleverouter.eu/v1. Authentication: Authorization: Bearer <key>.

Endpoint summary

EndpointPurposeKind
POST /v1/chat/completionsChat (stream + non-stream)chat
POST /v1/embeddingsVector embeddingsembedding
POST /v1/rerankDocument re-rankingrerank
POST /v1/audio/transcriptionsSpeech-to-text (multipart upload)audio
GET /v1/modelsLive model registry

Every body and response shape follows the OpenAI spec — same SDKs, same serialisation.

POST /v1/chat/completions

Headers

HeaderRequiredPurpose
Authorization: Bearer <key>yesAPI key
Content-Type: application/jsonyes
X-CleverRouter-Strategynodefault cheapest fastest best
X-CleverRouter-Providernoscaleway tensorix bedrock
Last-Event-IDnoSSE reconnect — set automatically by the SDK

Request body

FieldTypeDefaultNotes
modelstring<family>/<model>
messagesarrayOpenAI message-object shape
streambooleanfalseEnable SSE
temperaturenumber1.00–2
max_tokensintegerHard cap on completion tokens
top_pnumber1.0Nucleus sampling
toolsarraySee Function calling
tool_choicestring / objectauto
response_formatobject{ type: 'json_object' } or JSON Schema
seedintegerWhere the provider supports it
reasoning_effort`lowmediumhigh`

Example

curl https://api.cleverouter.eu/v1/chat/completions \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-CleverRouter-Strategy: cheapest" \
  -d '{
    "model": "mistral/mistral-small-3.2",
    "messages": [{ "role": "user", "content": "Hello." }]
  }'

Response headers

X-CleverRouter-Provider: scaleway
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 12
X-RateLimit-Reset: 47
X-Request-Id: 0193adc8-…

GET /v1/models

curl https://api.cleverouter.eu/v1/models \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY"

curl 'https://api.cleverouter.eu/v1/models?kind=embedding' \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "mistral/mistral-small-3.2",
      "object": "model",
      "kind": "chat",
      "owned_by": "mistral"
    }
  ]
}

Query filter: ?kind=chat | embedding | rerank | audio.

This endpoint is free — it doesn't count against your rate limit and never bills.

POST /v1/embeddings

curl https://api.cleverouter.eu/v1/embeddings \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cohere/embed-v4",
    "input": ["Hello from the EU."]
  }'

See Embeddings for encoding_format, dimensions, and the response shape.

POST /v1/rerank

curl https://api.cleverouter.eu/v1/rerank \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cohere/rerank-v3-5",
    "query": "EU GDPR",
    "documents": ["doc1", "doc2", "doc3"],
    "top_n": 2
  }'

See Rerank.

POST /v1/audio/transcriptions

Multipart form-data:

curl https://api.cleverouter.eu/v1/audio/transcriptions \
  -H "Authorization: Bearer $CLEVERROUTER_API_KEY" \
  -F file=@audio.mp3 \
  -F model=systran/faster-whisper-large-v3 \
  -F response_format=verbose_json

See Audio.

Error codes (quick reference)

HTTPerror.codeMeaning
400validation_errorBad request body
401unauthorizedMissing or invalid key
402budget_exceededPer-key budget reached
404model_not_foundModel id not in the registry
410model_deprecatedModel retired upstream
429rate_limit_exceededSliding-window rate limit hit
502provider_downUpstream 5xx with no healthy alternative
503provider_downAll EU providers unavailable
504upstream_timeoutUpstream read timeout

Full taxonomy with SDK error classes: Errors.

Closed beta

Sign-up is invite-only during the closed beta. Existing org admins can invite — see Organisations.