gpt-6-luna
Call GPT-6 Luna, OpenAI's most efficient GPT-6 model, through reAPI's Chat Completions endpoint with text or image input, reasoning effort control, structured outputs and function calling, billed per token.
OpenAI's GPT-6 Luna — its most efficient GPT-6 model, built for focused,
high-volume tasks — exposed through reAPI as an OpenAI-compatible Chat
Completions endpoint. A 1,050,000-token context window (up to 922,000
input tokens), 128,000 max output tokens, reasoning_effort from none
to max with medium as the default, text and image input, structured
outputs and streaming. The wire model id is gpt-6-luna. Current rates
live on the model page.
Quick example
curl https://reapi.ai/api/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"messages": [
{ "role": "user", "content": "Classify this support ticket as billing, bug, feature request or account access: I was charged twice this month." }
],
"reasoning_effort": "low",
"max_completion_tokens": 1000,
"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-6-luna",
messages=[{"role": "user", "content": "Classify this support ticket as billing, bug, feature request or account access: I was charged twice this month."}],
reasoning_effort="low",
max_completion_tokens=1000,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content if chunk.choices else None
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-6-luna",
messages: [{ role: "user", content: "Classify this support ticket as billing, bug, feature request or account access: I was charged twice this month." }],
reasoning_effort: "low",
max_completion_tokens: 1000,
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-6-luna",
"messages": []map[string]string{
{"role": "user", "content": "Classify this support ticket as billing, bug, feature request or account access: I was charged twice this month."},
},
"reasoning_effort": "low",
"max_completion_tokens": 1000,
})
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's model page lists both v1/responses and v1/chat/completions for
GPT-6 Luna and recommends the Responses API for built-in tools and function
calling. reAPI serves this model through Chat Completions; see
Tool calling for how function calling behaves here.
Parameter support on this model
Measured on this endpoint on 2026-09-24. Fields not listed below behave as documented by OpenAI.
| Field | Result |
|---|---|
reasoning_effort | Accepts none, low, medium, high, xhigh, max; medium when omitted |
max_completion_tokens | Applied, up to 128,000 |
max_tokens | Accepted. max_completion_tokens is the field OpenAI documents — prefer it in new code |
tools, tool_choice | Returns tool_calls, at medium effort as well as none — see Tool calling |
response_format | Applied, including json_schema with strict |
stream | Server-sent events ending with data: [DONE]; the last data chunk carries usage |
n | Only 1; a larger value returns 400 |
temperature, top_p, frequency_penalty, presence_penalty | Not supported by this model — sending any of them returns 400. Leave them out of the request |
seed, stop, logprobs, verbosity | Accepted (200) but have no effect — for example stop does not cut the answer and no logprobs come back. Do not rely on them |
The playground on the model page offers every field above that works; stream
starts off and the output cap starts blank, matching OpenAI's defaults. Any
other Chat Completions field can be added as JSON under "other fields".
Request body
model — string, required
Must be gpt-6-luna exactly. It is a different model from gpt-5.6-luna and
from gpt-6-sol.
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.
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].
response_format — object, optional
Constrains the answer's shape, including a JSON schema with strict: true for
machine-consumed output. Structured outputs are supported on GPT-6 Luna.
Reasoning effort
OpenAI's model page: "reasoning.effort supports none, low, medium
(default), high, xhigh, and max." On Chat Completions the same values go
in the top-level reasoning_effort field. All six are accepted by this
endpoint.
| Effort | When to use it |
|---|---|
none | No reasoning pass. The fastest choice for simple function-calling routes and plain classification |
low | Extraction and tagging where a short reasoning pass is enough |
medium | The default — a balance of accuracy and cost |
high | Harder judgement calls where accuracy matters more than cost |
xhigh | Hard cases where a longer reasoning pass pays for itself |
max | The most reasoning the model offers — rarely worth it for high-volume work |
For high-volume work, measure accuracy on a labelled sample at each setting and pick the lowest one that holds your target — reasoning tokens bill as output.
Tool calling
OpenAI's model page: "Use the Responses API for built-in tools and function
calling. Chat Completions supports function calling only with
reasoning_effort set to none."
That restriction describes OpenAI's own Chat Completions endpoint. On this
endpoint, requests with tools returned tool_calls at medium effort as well
as at none (measured 2026-09-24), so choose the effort the task needs. Your
application executes the returned tool_calls and sends each result back as a
tool message in the next request. This pattern suits routing: give GPT-6 Luna
a short list of functions and let it pick one — none keeps each decision
fastest.
Image input
| Modality | Supported |
|---|---|
| Text in | ✅ |
| Image in | ✅ |
| Text out | ✅ |
| Audio in / out | ❌ |
| Video in | ❌ |
Images go in as image_url content parts with a public HTTP(S) URL. Output is
text only.
Pricing dimensions
Billing is per token, from your reAPI credit balance:
- Input, output, cache read and cache write each have their own rate.
- Reasoning tokens bill as output. Effort is the first lever on cost.
- Prompts over 272K input tokens re-price the whole request at the long-context rates — OpenAI's own rule for this model, mirrored here.
Every standard-context rate sits below OpenAI's published per-token rate.
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.
Response shape
Non-streaming (stream: false)
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1790230000,
"model": "gpt-6-luna",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "..." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 45,
"completion_tokens": 30,
"total_tokens": 75,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 9 }
}
}usage.completion_tokens includes reasoning tokens, and
usage.prompt_tokens_details.cached_tokens is the part of the prompt billed at
the cache-read rate.
Streaming (stream: true)
Server-sent events, each data: line carrying a chat.completion.chunk with the
incremental text in choices[0].delta.content. The last chunk before
data: [DONE] carries usage; a chunk with an empty choices array is
normal and should be skipped.
Errors
Failures use the standard envelope: error.code, error.message and
error.request_id. 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-6-luna exactly |
n greater than 1 | Send one request per completion |
temperature, top_p, frequency_penalty or presence_penalty in the request | Remove the field — this model returns 400 for it |
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 |
Related
- GPT-6 Luna model page — current rates and playground
- GPT-6 Sol — for complex coding and agent workflows
- GPT-5.6 Luna
- Errors catalog
- Authentication
- Quickstart