Create message
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.
AuthorizationBearer <token>Your API key: Authorization: Bearer io-sk-…. If a request also sends x-api-key, x-api-key wins.
x-interodin-session-id?stringOptional 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?stringAccepted for Anthropic SDK compatibility (a date such as 2023-06-01). Only well-formed values are honoured.
anthropic-beta?stringAccepted for Anthropic SDK compatibility (comma-separated feature names). Only well-formed values are honoured.
application/json- body
model*stringmessages*array<>1 <= itemssystem?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*integerClamped to the model maximum. 0 or less returns 400.
1 <= valuestream?booleanfalsetemperature?number0 <= value <= 1top_p?number0 <= value <= 1top_k?integer1 <= valuestop_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.
A message, or an event stream when stream is true.
- response
id*stringtype*stringrole*stringmodel*PublicModelIdA public InterOdin model id, for example odin-v1.
^odin-[a-z0-9.-]+$content*array<>stop_reason*|"end_turn""max_tokens""stop_sequence""tool_use""pause_turn""refusal"nullstop_sequence?string|nullusage*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 }}Count message tokens POST
Counts the input tokens of a Messages request without running the model. Free: never billed, and it works even when the balance is zero. It counts toward rate limits.
List models GET
Lists the models your key may call. A key restricted to some models lists only those. OpenAI format by default; Anthropic format when the request carries an `anthropic-version` header. It sends `x-request-id` but no rate-limit headers. In practice only `invalid_api_key` (401), `organization_suspended` (403), `not_found` (404) and `internal_error` (500) occur here; the other error statuses are listed for completeness.