Overview
OpenAI clients use api.rodiumai.io/v1. Anthropic clients use api.rodiumai.io (SDK adds /v1/messages). Same rd_sk_… keys and RODI billing.
OpenAI-compatible base URL
https://api.rodiumai.io/v1Anthropic SDK base URL
https://api.rodiumai.io- EndpointAuthentication
Bearer rd_sk_… (x-api-key on Messages and audio), OIDC tokens
- EndpointGET /v1/models
List models & RODI rates
- EndpointGET /v1/models/coding
Coding-tagged models (OpenAI-compatible list)
- EndpointPOST /v1/chat/completions
Primary chat completions
- EndpointPOST /v1/messages
Anthropic Messages SDK drop-in (Claude-first)
- EndpointPOST /v1/responses
OpenAI Responses API (OpenAI upstream models)
- EndpointPOST /v1/embeddings
Vector embeddings for supported models
- EndpointPOST /v1/images/generations
Image generation and edits (GPT Image, Gemini Image), billed in RODI
- EndpointPOST /v1/videos/generations
Video generation (Veo), text- or image-conditioned
- EndpointPOST /v1/audio/transcriptions
Speech-to-text (multipart upload)
- EndpointPOST /v1/audio/speech
Text-to-speech (JSON → audio bytes)
- EndpointStreaming
Server-Sent Events for partial output
- EndpointGET /v1/wallet
Spendable RODI balance and spend totals
- EndpointGET /v1/pricing
Per-model RODI tariffs and capability metadata
- EndpointGET /v1/healthz
Liveness probe, process is up
- EndpointGET /v1/readyz
Readiness probe: {"status": "ok"} or 503 {"status": "degraded"}
- EndpointErrors
Status codes & JSON envelopes
Conventions
- Authentication:
Authorization: Bearer rd_sk_…on billable routes;x-api-keyonly on/v1/messagesand/v1/audio/*. See Authentication. - Bodies: JSON (UTF-8) except
/v1/audio/transcriptions(multipart). Every request body is capped at 10 MiB (413 payload_too_large). - Errors:
{"error": {"message", "type", "param", "code"}}, catalogued in Errors. - Long calls: providers may take minutes (reasoning, video). Use generous client timeouts and stream text where possible.
- Maintenance: during a maintenance window
/v1answers503withcode: maintenance_active.
X-Request-Id
Every response carries X-Request-Id. Send your own value (1 to 64 characters: letters, digits, -, _, .) to trace a call end to end; otherwise the gateway generates a req_… id. Unexpected 500 errors repeat it in error.request_id. Quote it when contacting support.
…Health probes
GET /v1/healthz (liveness) and GET /v1/readyz (readiness: databases and cache reachable) need no credential. Both answer only a status field: readyz returns 200 {"status": "ok"}, or 503 {"status": "degraded"} when a dependency is down.
…