Quick reference
Effort levels
Every endpoint accepts the same levels, from least to most thinking:none, minimal, low, medium, high, xhigh, max
- Which levels a model takes is listed in its
reasoning.effort_levelsin the model catalog. Levels differ by model: Claude 5 models takelowtomax, for example, and GPT-5.4 takesnone,low,medium,highandxhigh. - A level the model doesn’t take normally runs at the nearest level it does. For example,
noneandminimalrun aslowon Claude 5 models, and an effort sent to a model that doesn’t reason is not sent at all. On Gemini 2.5 models,xhighandmaxcan be refused with a400, so sendhigh. - Gemini models take levels up to
high. Sendhighrather thanxhighormax. noneasks for no reasoning. Models that can’t stop thinking (can_disable: false) still think, but return no reasoning.- Stay within
effort_levelsto be sure of the level you get. A few models can still receive a level they don’t list, for examplelowon GPT-5.2 Pro and GPT-5.4 Pro.
Pick an effort from the model catalog
GET /platform/v2/models returns a reasoning object on every model that reasons, and null on every model that doesn’t:
What comes back
Chat Completions
A non-streamed answer carries the reasoning inmessage.reasoning_content:
delta.reasoning_content chunks before the first answer chunk (chunks trimmed):
Responses
On the Responses endpoints, setreasoning.summary (auto, concise or detailed) to get the reasoning back. Without it, OpenAI and Claude models normally return no summary.
The summary comes back as a reasoning item in output[], before the message item:
reasoning_; OpenAI models return rs_ ids.
Only Direct Responses streams the summary, and only for OpenAI models served over OpenAI’s Responses API, which pass on OpenAI’s own reasoning events. They arrive before the message item opens (payloads trimmed):
response.reasoning_summary_text.delta (or the final text from .done) and the answer from response.output_text.delta, as with OpenAI.
Examples by endpoint
Each example sets an effort and reads the reasoning and the answer. Streamed examples are shown for the endpoints that stream reasoning. The OpenAI SDKs sendreasoning_effort and reasoning natively. They don’t type reasoning_content, so read it with getattr in Python and a wider type in TypeScript. Parameters the SDKs don’t know, such as the grounding parameters, go in extra_body in Python and top-level with a cast in TypeScript. If your SDK version doesn’t type a level you send (such as max), pass it in extra_body as well.
Completions
POST /ai/v2/guarded/chat/completions. The answer is moderated; the reasoning is not (see below).
Grounded Completions
POST /ai/v2/grounded/chat/completions. Point the SDK at https://platform.ai.gloo.com/ai/v2/grounded and send the grounding parameters as extra fields. The answer is moderated; the reasoning is not.
Direct Completions
POST /ai/v2/direct/chat/completions. Nothing is moderated on direct endpoints.
Responses
POST /ai/v2/guarded/responses. The answer is moderated; the reasoning summary is not.
Grounded Responses
POST /ai/v1/grounded/responses. Point the SDK at https://platform.ai.gloo.com/ai/v1/grounded and send the grounding parameters as extra fields.
Direct Responses
POST /ai/v2/direct/responses. A non-streamed response carries the summary for every model that returns one. A stream carries it only for OpenAI models served over OpenAI’s Responses API, such as GPT-5.4.
How the endpoints differ
By model family
Check the live model catalog for current model IDs and each model’s
reasoning object.
Reasoning is not moderated
On the guarded endpoints (Completions, Grounded Completions and Responses), output moderation checks the answer, not the reasoning. When moderation replaces an answer, the reasoning from the original answer is still returned.Thinking uses your output limit
Thinking tokens count towardmax_tokens (max_output_tokens on Responses) and are billed as output tokens, whether or not any reasoning comes back.
For Claude 5 models and Gemini 2.5 Flash and Flash-Lite, Gloo sends your limit to the provider as you set it. A high effort can use up a small limit before the answer starts, and the response then ends with finish_reason: "length" and little or no answer text. Leave room for the thinking as well as the answer, or lower the effort. See Reasoning models and the output limit.
When a provider fails mid-reasoning
For the Claude models that always think, if the provider fails after a Direct Completions stream has sent reasoning but no answer text, Gloo can send the request to another provider instead of ending the stream with an error. The new provider’s reasoning then arrives in the same stream, starting from the beginning. No chunk marks the switch. If you show reasoning as it arrives, be ready for it to start over, or show only the answer indelta.content. Once answer text has been sent, the stream is not switched this way.
Reasoning across turns
Reasoning items never includeencrypted_content, and include: ["reasoning.encrypted_content"] returns none. Reasoning items you send back in input are not used as reasoning state: any encrypted reasoning in them is removed before a model is called, and the request still succeeds.
The removal is reported:
- Responses and Grounded Responses add a
reasoning_carryoverfield, for example{"received": 2, "carried": 0, "dropped": [{"id": "rs_1", "reason": "not_gloo_state"}], "not_sealed": null}. On a stream, the counts are in theX-Gloo-Reasoning-Carryoverheader and the final field is inresponse.completed. - Direct Responses reports it as
input.reasoning=<n>inignored_params.
paired_removed in reasoning_carryover, input.reasoning_paired=<n> in ignored_params). Send the full conversation in input each turn; the model reasons afresh.
supports_reasoning and reasoning_level
On GET /platform/v2/models, supports_reasoning is true exactly when reasoning is not null. It does not promise that reasoning text comes back; reasoning.returns_summary says that. reasoning_level is an overall quality rating from 0 to 5, not a measure of reasoning: a model that does not reason can score 4.
Related Documentation
- Supported Models — Model IDs and the
reasoningobject - Provider Failover — What happens when a provider fails, including reasoning and the output limit
- Endpoint Types — Which endpoints run guardrails and moderation

