API reference
Use your deployment origin as EU_ROUTER_BASE_URL. Download the generated API schema.
Endpoints
GET /v1/models— currently eligible model IDs.POST /v1/chat/completions— text chat, JSON or streamed SSE.GET /v1/requests/{id}— execution and accounting status for a request made with your key.
curl "$EU_ROUTER_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer $EU_ROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: a-unique-operation-id" \
-d '{"model":"<model-from-v1-models>","messages":[{"role":"user","content":"Hello"}],"max_tokens":128,"stream":true}'Supported chat fields
model and messages are required. Messages have a role (system, user or assistant) and string content. Optional fields are stream, max_tokens, temperature, top_p, presence_penalty and a provider slug in provider. Nonzero frequency_penalty is rejected by the initial adapter.
Output is limited to 32,768 tokens and defaults to 1,024. The route context window and request size limits also apply. Tools, images, embeddings and structured output are not supported by this initial API subset. Unknown request fields are rejected.
Streaming and accounting
The response uses text/event-stream. A final usage record is needed to settle a request. Missing usage, interrupted streams and ambiguous timeouts can leave the charge pending. Use the request ID and status endpoint to inspect the outcome.
Idempotency
Send a unique Idempotency-Key for each logical operation. Repeating the same payload with the same key returns HTTP 409 with the existing request ID and status URL; it does not execute again or replay old content. Reusing the key for a different payload is rejected.
Errors
Errors use an error object with a stable code. Authentication, authorization, insufficient credits, capacity limits and unavailable routes fail before dispatch when known. Do not blindly retry a request whose upstream outcome is uncertain.