gpt-5.6-luna
GPT-5.6 Luna — OpenAI's volume tier of the GPT-5.6 family, carrying the family's full limits at the lowest rate. OpenAI-compatible /api/v1/chat/completions on reapi.ai with a 1,050,000-token context window, 128,000 max output tokens, six reasoning-effort rungs, and text plus image input.
OpenAI's GPT-5.6 Luna — the tier optimised for cost-sensitive, high-volume workloads — exposed through reAPI as a drop-in
OpenAI-compatible Chat Completions endpoint. A 1,050,000-token context
window, 128,000 max output tokens, six reasoning_effort rungs from
none to max defaulting to medium, text and image input, and
functions, web search, file search and computer use. OpenAI rates its reasoning High and its speed Fast. The wire
model id is gpt-5.6-luna. Current rates live on the
model page.
The URL and the model id differ. This page and the model page spell the slug
gpt-5-6-luna because a URL cannot carry dots. The string your request body needs is
gpt-5.6-luna.
Quick example
curl https://reapi.ai/api/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"messages": [
{ "role": "user", "content": "Classify this ticket. Return only the category id." }
],
"reasoning_effort": "none",
"max_completion_tokens": 4096,
"stream": true
}'from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://reapi.ai/api/v1",
)
stream = client.chat.completions.create(
model="gpt-5.6-luna",
messages=[{"role": "user", "content": "Classify this ticket. Return only the category id."}],
reasoning_effort="none",
max_completion_tokens=4096,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="")import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://reapi.ai/api/v1",
});
const stream = await client.chat.completions.create({
model: "gpt-5.6-luna",
messages: [{ role: "user", content: "Classify this ticket. Return only the category id." }],
reasoning_effort: "none",
max_completion_tokens: 4096,
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "gpt-5.6-luna",
"messages": []map[string]string{
{"role": "user", "content": "Classify this ticket. Return only the category id."},
},
"reasoning_effort": "none",
"max_completion_tokens": 4096,
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/chat/completions", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}Authentication
Use your reAPI API key — the same key that calls the image, video and audio endpoints — as a bearer token:
Authorization: Bearer YOUR_API_KEYCreate one under API keys in your reAPI dashboard. Chat requests are billed from the same credit balance as every other model on the platform.
Endpoint
POST /api/v1/chat/completionsBase URL https://reapi.ai/api/v1. The wire format is OpenAI-compatible, so the
same SDKs work once you swap the base URL, the key and the model string.
OpenAI states that its reasoning models "work better with the Responses API",
and that "while the Chat Completions API is still supported, you'll get improved
model intelligence and performance by using Responses." The GPT-5.6 release entry
lists v1/responses, v1/chat/completions and v1/batch as this family's
endpoints — so Chat Completions is a documented, supported surface, and this is a
vendor preference rather than a restriction.
Parameter support on this model
Every field in OpenAI's Chat Completions reference (37 request-body fields as of 2026-09-07) was sent to this endpoint one at a time on that date. Fields not listed below behave as documented by OpenAI.
| Field | Result |
|---|---|
reasoning_effort | Accepts none, low, medium, high, xhigh, max. minimal returns 400 |
temperature | Only the default value is accepted; any other value returns 400 |
top_p | Not supported by this model — any value returns 400 |
n | Only 1; a larger value returns 400 |
tools, tool_choice, parallel_tool_calls | Applied — function calling works, including strict schemas |
max_completion_tokens | Applied, up to 128,000 |
max_tokens | Accepted (returns 200). max_completion_tokens is the field OpenAI documents — prefer it in new code |
response_format | Applied, including json_schema with strict |
frequency_penalty, presence_penalty | Accepted (200), but OpenAI documents neither for this model — do not rely on them |
web_search_options | Enables web search for the request. Each such request carries roughly 4,400 extra input tokens of tool context, billed at the input rate |
stop, seed, logprobs, top_logprobs, logit_bias, prediction, verbosity, audio, modalities, service_tier, safety_identifier, moderation, prompt_cache_options, prompt_cache_retention | Accepted (200) and ignored — no effect on the response |
legacy functions / function_call | function_call together with tool_choice returns 400; use tools / tool_choice |
The sampling restrictions (temperature, top_p) are what OpenAI states for
its reasoning models; the rest was found by testing. There is no minimal on
this family.
Request body
model — string, required
Must be gpt-5.6-luna exactly. There is no alias for this tier — the bare gpt-5.6 id routes to the frontier model instead.
messages — array, required
Conversation history, each entry an object with role and content. Roles are
system, user, assistant and tool. Text and image parts are supported —
see Image input.
max_completion_tokens — integer
Upper bound on generated tokens for this response, reasoning tokens included. The documented maximum output is 128,000 tokens.
Reasoning tokens bill as output tokens and occupy the context window. A budget sized only for the visible answer can truncate on a harder prompt, and it is the usual reason an invoice exceeds an estimate built from answer length.
reasoning_effort — string, default "medium"
How much the model thinks before answering. See Reasoning effort.
stream — boolean, default false
When true, tokens arrive as server-sent events terminated by data: [DONE].
On a volume route the useful reason to stream is early cancellation: you can abandon a response that has already gone wrong instead of paying for the rest of it.
tools / tool_choice — optional
Function definitions and the selection strategy. Functions, web search, file search and computer use are all available on this family, and this generation adds programmatic tool calling.
response_format — object, optional
Constrains the answer's shape, including a JSON schema for machine-consumed output.
Reasoning effort
Six rungs, and unlike some families these do not collapse into one another —
each is a distinct behaviour. The default is medium: OpenAI's docs state
that "if you omit reasoning.effort, GPT-5.6 defaults to medium in both modes."
| Effort | OpenAI's stated best-for |
|---|---|
none | Latency-critical tasks that do not benefit from reasoning or multi-chained tool calls — voice, fast retrieval, classification |
low | Efficient reasoning with modest added latency: tool use, planning, search, multi-step decisions |
medium | Default. Quality and reliability where the task involves planning and judgement — agentic coding, research, spreadsheets and slides, delegated long-horizon work |
high | Hard reasoning, complex debugging, deep planning, high-value tasks where quality beats latency |
xhigh | Deep research and long asynchronous runs — security and code review, enterprise productivity. "Only use when your evals show a clear benefit" |
max | "Maximum reasoning for your most complex tasks. If you are currently using xhigh, evaluate if max results in stronger performance" |
There is no minimal on this family.
All six rungs reach the model through this endpoint (measured 2026-09-07);
minimal is rejected with a 400. The table above is OpenAI's own description
of the family; the parameter table earlier on this page is what this endpoint
answers.
This is the tier the bottom of that ladder exists for. Set effort explicitly
— the default is medium, so a request that omits the field is paying for a
reasoning pass a classification route probably does not want.
OpenAI also documents a Pro reasoning mode for GPT-5.6 (reasoning.mode,
independent of effort), and multi-agent orchestration in beta. Both are
features of OpenAI's Responses API, so neither is part of a Chat Completions
request through this endpoint.
Image input
| Modality | Supported |
|---|---|
| Text in | ✅ |
| Image in | ✅ |
| Text out | ✅ |
This generation accepts images at their original dimensions, with original
or auto image detail — no resizing step required before a screenshot or scan
goes in. Output is text only.
Pricing dimensions
Billing is per token, from your reAPI credit balance, with separate input and output rates. Three things to keep in mind:
- Reasoning tokens bill as output. The default effort is
medium, so a request that omits the field is paying for a reasoning pass. - Effort is the first lever, and on this family every rung is real — a middle setting buys a middle cost.
- The tier is the second lever. All three GPT-5.6 tiers share this context window, this output ceiling, this effort ladder and this endpoint, so moving between them changes reasoning depth and price, not capability surface.
Both token rates sit below OpenAI's published per-token rate, on input and
output alike; the model page reads them live. Current numbers are on the
model page — that table is the canonical
source, not this page. The platform constants are 1 credit = $0.001
and $1 = 1,000 credits; a request's cost is its input and output tokens at the
per-million rates, converted at that ratio.
OpenAI prices cached input as a separate dimension. reAPI does not publish a cached-input rate for this model, so bill against the input and output rates in the pricing table.
Response shape
Non-streaming (stream: false)
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1785000000,
"model": "gpt-5.6-luna",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "..." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1204,
"completion_tokens": 860,
"total_tokens": 2064
}
}usage.completion_tokens includes reasoning tokens, so it is the number to
reconcile a bill against. On OpenAI's own Responses API the split is reported
under output_tokens_details.reasoning_tokens.
Streaming (stream: true)
Server-sent events, each data: line carrying a chat.completion.chunk with the
incremental text in choices[0].delta.content, terminated by data: [DONE].
Errors
Failures use reAPI's standard error envelope. See the errors catalog for the full code list. Common cases:
| Trigger | What to do |
|---|---|
| Missing or invalid API key | Create a key under API keys in the reAPI dashboard |
Unknown model value | Send gpt-5.6-luna with the dots — not the hyphenated slug |
reasoning_effort set to minimal | Not on this family — use none, low, medium, high, xhigh or max |
temperature other than the default, or any top_p | Remove the field; the model rejects it |
n greater than 1 | Send one request per completion |
reasoning.mode or multi-agent fields | Responses-API features; not part of a Chat Completions request |
max_completion_tokens above the ceiling | Lower it; the documented maximum output is 128,000 |
| Truncated answer on a hard prompt | The reasoning pass consumed the allowance — raise max_completion_tokens |
| Insufficient balance | Top up your reAPI credits |
| Upstream rate limit | Retry with backoff, or route through another tier |
Tips
- Set effort explicitly. The default is
medium; on this tiernoneorlowis usually what you actually mean. - Cap
max_completion_tokenstight. On volume work it is a cost ceiling, not just a length limit. - Constrain the output with a schema. A machine-parsed route turns a bad answer into a validation error you can see.
- Do not pair
nonewith a long tool loop. OpenAI ties the no-reasoning rung to routes without multi-chained tool calls; raise the effort instead. - Use it as the first stage. Cheap triage here, escalation to a dearer tier by model string, is the biggest cost lever on a chat workload.
- The window is the frontier tier's. Dropping to this tier does not force you to split long inputs.
Related
- GPT-5.6 Luna model page — current rates
- GPT-5.6 Terra — the balanced tier above it
- GPT-5.6 Sol — the frontier tier
- Errors catalog
- Authentication
- Quickstart