Formats
The same models answer in three request formats. Use whichever your tool already speaks; the key and the billing are the same.
| Format | Path | Who sends it |
|---|---|---|
| OpenAI chat completions | POST /v1/chat/completions | opencode, Hermes Agent, SillyTavern, the OpenAI SDKs |
| Anthropic messages | POST /v1/messages | Claude Code, the Anthropic SDKs |
| OpenAI responses | POST /v1/responses | Codex and tools built on the Responses API |
Chat completions
- Streaming is server-sent events with
"stream": true, ending in[DONE]. Usage arrives on streams without you asking for it. - The output limit can be sent as
max_tokens,max_completion_tokensormax_output_tokens. - Images go in as
image_urlparts, as a URL or a data URI, on models that listsupports_vision. reasoning_effortis moved to the nearest value the model supports. Reasoning text comes back on the message asreasoningorreasoning_content.- A
developermessage is treated assystem. - These fields are accepted and ignored:
n,best_of,service_tier,provider,route,transforms,plugins,extra_body.
Messages
- Mapped:
system,max_tokens,temperature,top_p,stop_sequences, your own tools,tool_choice, image blocks and document blocks. - Dropped:
thinking,top_k,metadataand Anthropic's server tools. cache_controlis kept. A system prompt of 4,000 characters or more with no breakpoint is marked for caching for you.- Usage reports
input_tokens,output_tokensandcache_read_input_tokens. POST /v1/messages/count_tokensreturns an estimate and spends nothing.
Responses
- Mapped:
input,instructions,max_output_tokens,temperature,top_p,stream, function tools,tool_choice,text.formatand image input. previous_response_idis refused with a 400: send the conversation each time. Hosted tools are dropped.