Skip to main content
Direct Completions is the OpenAI-compatible Chat Completions format on a direct endpoint: your request goes straight to the model you name, and Gloo adds nothing between your prompt and the provider. Direct endpoints add no platform fee. You pay the model’s published rate (see the Models page and GET /platform/v2/models). Coming from another gateway? Direct endpoints cost what you would pay going straight to the model providers. Use it when you already have tooling built on the Chat Completions request shape and your application owns its own safety and prompting. If you are starting fresh, prefer Direct Responses — same directness, a more capable request shape, and vision and image generation as first-class citizens. If you want Gloo’s guarded pipeline — guardrails, output moderation, values-alignment (tradition), model_family selection, auto-routing — use Completions instead. The two share a request shape; they differ in what runs around it.

Quick start

URL: https://platform.ai.gloo.com/ai/v2/direct/chat/completions
The request and response shapes mirror the OpenAI Chat Completions API, so existing SDKs and tooling work by pointing the base URL at Gloo.

What runs, and what doesn’t

Identical to every direct endpoint — see Endpoint Types for the full list. In short: authentication, entitlement, metering, the model catalog, provider resiliency and rate limits all still apply; guardrails, output moderation, values-alignment and routing deliberately do not.

Reasoning summaries

Send reasoning_effort (none, minimal, low, medium, high, and xhigh or max on models that take them) to set how much a reasoning model thinks. A graded effort also asks for a summary of the model’s reasoning. When the model returns one, a non-streamed answer carries it in choices[0].message.reasoning_content, and a stream carries it in delta.reasoning_content. none asks for no reasoning and no summary. The model catalog shows which efforts each model takes (reasoning.effort_levels) and whether it returns a summary (reasoning.returns_summary).

Claude models that always think

Claude Opus 5.5, Sonnet 5.5 and Haiku 5.5, and the earlier Opus 5, Sonnet 5, Fable 5 and Fable 5.1, return a reasoning summary when you send a reasoning_effort other than none, on streamed and non-streamed requests.
  • They always think. Without reasoning_effort these Claude models still reason, and return no summary. none cannot turn reasoning off: it runs at low and returns no summary (an answer from a fallback provider may still include reasoning). minimal also runs at low, and returns the summary.
  • They decide how much to reason. At a low effort on an easy prompt, the model may return no summary.
  • Streamed reasoning can repeat. If the provider fails after a 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 in delta.content. Once answer text has been sent, the stream is not switched this way.
The guarded and grounded endpoints return these summaries only on non-streamed requests. See Completions. For examples on every endpoint and in every language, see Reasoning.

Example

A request to Claude Opus 5.5 with a reasoning effort:
The summary comes back beside the answer:
With "stream": true, the summary arrives before the answer, in chunks whose delta has reasoning_content and a null content, followed by the answer in delta.content:

When a request fails

Most errors use the standard error object; the content-policy refusal below does not. Two cases are worth handling explicitly:
  • No provider could serve the model — 503 with 2002 / PROVIDER_UNAVAILABLE and retryable: true, or on a stream, a 2002 stream error event. Gloo tries every provider that serves the model first. It is not your request, key, credit, or spend limit: retry with exponential backoff. See Every provider unavailable.
  • The provider declined the request under its content policy — 400 whose body has detail.code: "provider_content_policy_violation" and detail.retryable: false and no top-level error object, or a finish_reason: "content_filter" ending on a stream. Rephrase the request or choose a different model; do not retry it unchanged. See Content Policy Refusals.

Choosing between the direct formats

Use this page when you have existing OpenAI Chat Completions tooling that should keep its request shape. For new integrations — and for vision or image generation — use Direct Responses instead; both are direct, and the only difference is the request shape. For the full comparison across guarded, direct and grounded endpoints, see Which endpoint should I use?.

Next Steps

Direct Responses

The recommended direct format for new integrations.

Endpoint Types

Compare guarded, direct, and grounded endpoints.

Supported Models

Model IDs, capabilities, and pricing.