Docs
API referenceMessages

Create message

POST
/v1/messages

Anthropic Messages format. Accepts x-api-key or Authorization: Bearer (x-api-key wins if both are sent), query strings such as ?beta=true, and the anthropic-version / anthropic-beta headers.

Authorization

headerAuthorizationBearer <token>

Your API key: Authorization: Bearer io-sk-…. If a request also sends x-api-key, x-api-key wins.

Header Parameters

x-interodin-session-id?string

Optional prompt-cache routing hint, honoured on every generation endpoint (including count_tokens). Send the same opaque value (for example a conversation id, at most 128 characters recommended) on every request of one conversation. Never put prompts, personal data or secrets in it.

anthropic-version?string

Accepted for Anthropic SDK compatibility (a date such as 2023-06-01). Only well-formed values are honoured.

anthropic-beta?string

Accepted for Anthropic SDK compatibility (comma-separated feature names). Only well-formed values are honoured.

Request Body

application/json
  1. body
model*string
messages*array<>
Items1 <= items
system?string|array<>
tools?array<|>

Client tools: tools with no type or with type: "custom" (name, description, input_schema). The web search tool (type: "web_search_20250305", at most 5 searches per request, billed per search) is also kept. Tools with any other type (code execution, bash, text editor, computer use) and mcp_servers are removed from the request without an error.

tool_choice?
thinking?

Thinking is on or off. disabled turns it off on both models. budget_tokens does not cap it.

output_config?

Accepted and ignored: thinking has no levels.

max_tokens*integer

Clamped to the model maximum. 0 or less returns 400.

Range1 <= value
stream?boolean
Defaultfalse
temperature?number
Range0 <= value <= 1
top_p?number
Range0 <= value <= 1
top_k?integer
Range1 <= value
stop_sequences?array<string>
metadata?

Only user_id is forwarded, and only as a hash specific to your organization. Other keys are dropped, and a metadata that is not an object is ignored.

Response Body

A message, or an event stream when stream is true.

  1. response
id*string
type*string
role*string
model*PublicModelId

A public InterOdin model id, for example odin-v1.

Match^odin-[a-z0-9.-]+$
content*array<>
stop_reason*|
Value in"end_turn""max_tokens""stop_sequence""tool_use""pause_turn""refusal"null
stop_sequence?string|null
usage*
curl -X POST 'https://api.interodin.com/v1/messages' \  -H 'Content-Type: application/json' \  -d '{  "model": "odin-v1",  "max_tokens": 1024,  "messages": [    {      "role": "user",      "content": "Say hello in Romanian."    }  ]}'
{  "id": "string",  "type": "message",  "role": "assistant",  "model": "odin-v1",  "content": [    {      "type": "text",      "text": "string",      "thinking": "string",      "signature": "string",      "data": "string",      "id": "string",      "name": "string",      "input": {}    }  ],  "stop_reason": "end_turn",  "stop_sequence": "string",  "usage": {    "input_tokens": 0,    "output_tokens": 0,    "cache_creation_input_tokens": 0,    "cache_read_input_tokens": 0  }}