API reference
Every endpoint, with request and response schemas and a live playground.
The API speaks three formats. They all reach the same models and share one key, one balance and one set of rate limits.
| Endpoint | Format |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/responses | OpenAI Responses (stateless) |
POST /v1/messages | Anthropic Messages |
POST /v1/messages/count_tokens | Anthropic token counting (free) |
GET /v1/models | Model list (OpenAI format; Anthropic format when you send anthropic-version) |
- Base URL for OpenAI SDKs:
https://api.interodin.com/v1 - Base URL for Anthropic SDKs:
https://api.interodin.com. They add/v1themselves. - Authentication:
Authorization: Bearer io-sk-…orx-api-key: io-sk-…. If you send both,x-api-keyis used. - From servers only: the API doesn't accept browser (CORS) requests from other sites, so keep your key on your server.
Try it
Every endpoint page has a playground. Open it with Try in Playground:
- Paste your key into the Authorization field.
- Edit the body.
- Send the request.
The request goes through the docs server to the API (browsers can't call the API directly), and nothing is stored on the way. Playground calls are billed like any other request, and the playground waits up to two minutes for a reply. Closing the dialog doesn't cancel a request that has already been sent, so it is still billed.
Machine-readable spec
The full OpenAPI 3.1 document is published as openapi.json and openapi.yaml. Import it into Postman, Insomnia or a client generator.
Odin Flash
Context window, capabilities and prices for odin-flash.
Create chat completion POST
Generates the next assistant message. With `stream: true` the reply is sent as server-sent events: each `data:` line is a `ChatCompletionChunk`, the last chunk carries `usage`, and the stream ends with `data: [DONE]`.