Responses API
The Responses API provides an OpenAI-compatible interface for text generation,
reasoning, structured output, and tool calling. Streaming is optional: the same
pattern as Chat Completion V2: omit stream
or set it to false for one JSON response (default).
The Responses API supports sarvam-105b, glm5.3, glm5.3-flash, and gemma4,
plus the beta models deepseekv4.1-flash-1017, deepseekv4-pro,
kimi-k3, mimo-v2.6-flash, and mimo-v2.6-pro.
Moving Responses API code from OpenRouter or Fireworks AI? See the Responses API migration guides.
Create a response
Use POST /v2/responses. The endpoint is stateless:
send the complete conversation in input on every request. Omit store or set it to
false (true returns 400).
Nothing is stored for later retrieval, GET /v2/responses/{id} returns 404.
GET /v2/responses and DELETE /v2/responses/{id} return 405 (documented in the
API Reference alongside POST /v2/responses).
The examples above do not set stream. That returns a single JSON body (HTTP 200),
same as Chat Completion V2 when stream is omitted. Only add "stream": true when you
want server-sent events.
Stream a response (optional)
Set stream to true when you want named server-sent events instead of one JSON body. Streams end with
response.completed, response.incomplete, or response.failed; they do not emit a
[DONE] sentinel. On glm5.3, streamed items can nest: pair events by item_id.
Usage appears on the terminal event (there is no stream_options).
Continue a conversation
The endpoint does not store response state. To continue a conversation, send the prior
messages and outputs again in input. Do not use previous_response_id or conversation
, both return 400.
For message parts in input, text uses {"type": "input_text", "text": "…"} (not chat
completions’ {"type": "text"}).
Reasoning
The reasoning models (glm5.3, glm5.3-flash, gemma4, deepseekv4.1-flash-1017,
deepseekv4-pro, kimi-k3, mimo-v2.6-flash, and mimo-v2.6-pro) support three modes, low, high, and max, and Chat
Completion V2 accepts all three directly. gemma4 reasons only when you set an effort. On this route (Responses), the models
differ:
Chat trace: choices[].message.reasoning_content.
Responses trace: reasoning models return a reasoning item in output when they
reason. Read the trace from its content[0].text. Its summary is empty unless you set the
optional reasoning.summary to auto or detailed. At low effort, glm5.3 often skips
reasoning on simple prompts and returns no reasoning item. gemma4 reasons when you set an
effort but doesn’t return a reasoning item; its reasoning shows only in
usage.output_tokens_details.reasoning_tokens.
Reasoning tokens count toward max_output_tokens, which has no default cap on
this route, omitting it means unbounded generation. On chat, the equivalent budget is
max_tokens, which defaults to 2048 on glm5.3 only. Set it explicitly. See the
Chat Completion V2 API Reference.
Defaults when omitted (glm5.3)
Parameters
Refused or unsupported on this route
These return 400 (the error names the field): store: true, background: true,
previous_response_id, conversation, max_tool_calls, prompt, item_reference.
On Responses, the open-weight models return 400 for logprobs and repetition_penalty.
For log probabilities on glm5.3-flash and deepseekv4.1-flash-1017, send top_logprobs with
include: ["message.output_text.logprobs"] instead; glm5.3 and gemma4 don’t support them on
this route. On Chat Completion V2, logprobs and
top_logprobs are supported on every model except glm5.3, which returns a clean 400. See
Chat Completion V2 for details.
See the Responses API Reference for the complete
request, response, error, and streaming-event schemas. Model-specific limits for
glm5.3 are also summarized on the GLM-5.3 model page.