Responses API exposes a public reasoning request field and can return reasoning as its own typed output items. That is one reason the response is item-based instead of a single assistant message string.
Use reasoning when you want to trade more latency and token usage for harder planning, decomposition, or tool selection.
Request Controls
Use the publicreasoning field to request additional reasoning budget on models that support it.
noneminimallowmediumhighxhigh
Response Items
Reasoning can appear in theoutput array before, after, or between message and tool items.
reasoning item can include:
summarywithsummary_textpartscontentwithreasoning_textpartsencrypted_content
Streaming Behavior
When streaming, reasoning-related events can arrive before the final message text.response.reasoning_summary_text.deltastreams reasoning summary textresponse.reasoning_text.deltaorresponse.reasoning.deltastreams reasoning textresponse.output_item.donecan finalize a reasoning item withencrypted_contentresponse.completedcloses the final snapshot
Preserve Reasoning Across Tool Turns
This gateway is stateless. If you want the model to continue from the same reasoning state after a tool call, replay the earlierreasoning item unchanged in the next input[] request together with the earlier function_call and the new function_call_output.
reasoning item as model output. Do not edit, reorder, or partially copy it if you want continuity.
Caveats
- not every reasoning-capable model exposes visible reasoning items
- output order matters; do not assume the first item is the final answer
- reasoning can coexist with
function_callitems and laterfunction_call_outputitems in the same workflow
Common mistakes
- turning reasoning effort up by default without measuring the cost and latency impact
- dropping reasoning items when continuing a tool workflow that depends on continuity
- assuming visible reasoning is guaranteed on every supported model