Create a response
Requests a model response using the OpenAI Responses API request shape (input/instructions); internally converted to Chat Completions format and routed to any supported model — this is a translation layer, not a separate inference path. This is a stateless endpoint: passing store: true or a non-null previous_response_id returns 400 (see the 400 entry below for its distinct error shape) — every call must carry the full conversation in input. When streaming, reasoning is surfaced via response.reasoning_text.delta events and a type:"reasoning" output item.
/api/v1/responsesAuthorizations
AuthorizationrequiredAPI key as bearer token in the Authorization header.
Body
modelrequiredThe model to use, provider-qualified, e.g. "openai/gpt-5.2".
"openai/gpt-5.2"inputrequiredConversation input — either a single string, or a structured array of items (message/function_call/function_call_output). Messages may use plain text or a content-block array including input_image.
instructionsSystem-level instructions, inserted as the first system message at the front of the converted messages array.
streamtrue streams the response as Responses-API SSE events (response.created, response.output_item.added, response.output_text.delta, response.reasoning_text.delta, response.completed, and others); omitted or false returns a single JSON response.
max_output_tokensMaximum number of tokens the response may generate (converted to the upstream Chat Completions max_tokens).
toolsList of tool/function definitions the model may call. Accepts the Responses-spec flat shape {type:"function", name, description, parameters} (recommended), and also the Chat Completions nested shape {type:"function", function:{...}} (accepted for back-compat, passed through as-is). The response object's tools field echoes whatever was actually sent here.
tool_choiceControls whether/how the model is forced to call a tool, e.g. {type:"function", name:"..."} (flat shape, recommended, auto-converted for upstream) or "auto". The response object's tool_choice field echoes whatever was sent here, defaulting to "auto" when omitted.
parallel_tool_callsWhether to allow parallel tool calls when tools are provided. Defaults to true when omitted; the response object's parallel_tool_calls field echoes whatever was sent here.
pluginsArray of plugins (e.g. {id:"web"} to enable web search). Supported only on some model routes, no effect elsewhere; the :online model variant auto-injects {id:"web"} only when you didn't send any plugins, likewise only on supporting routes.
store⚠️ This endpoint is stateless — passing true returns 400 immediately, it is never accepted or silently ignored. Omitting it or passing false is the only valid usage.
previous_response_id⚠️ This endpoint is stateless — passing any non-null value returns 400 immediately, it is never accepted or silently ignored. To continue a conversation, send the full history in the input array instead.
modelsFallback model list — tried in order, only used once the primary model's own candidate group is exhausted.
reasoningReasoning-model thinking control object (e.g. {effort, max_tokens}), forwarded as-is upstream — no defaults are injected.
reasoning_effortFlat shorthand for reasoning.effort.
lowmediumhighthinkingClaude extended-thinking's additive token budget (e.g. {type:"enabled", budget_tokens:2048}), on top of max_output_tokens — forwarded as-is, no defaults injected.
enable_thinkingThinking on/off toggle for Qwen3/GLM-family models, forwarded as-is.