
How to Use the GPT-6 Astra API: First Call, Effort Levels & Migration from GPT-5.6

gpt-6-astra, on the same OpenAI-compatible endpoint and API key as GPT-5.6, at 10% below OpenAI list price.configuration_update, or the 30m cache option. These features require separate EvoLink route verification before use.Quick Reference Card
| Item | Value |
|---|---|
| Model ID | gpt-6-astra (no gpt-6 alias on OpenAI or EvoLink) |
| Endpoint | https://api.evolink.ai/v1 (OpenAI-compatible) |
| API surfaces (OpenAI) | Responses, Chat Completions (no tool calling), Batch; EvoLink feature support must be verified separately |
| Context window | 1,050,000 tokens shared by input and output; maximum input 922,000; maximum output 128,000 |
| Input / output | Text and image in; text out |
| Knowledge cutoff | April 30, 2026 |
| Reasoning effort | low, medium, high, xhigh, max; none and minimal return a 400 |
| Removed parameters | temperature, top_p, logprobs |
| Prompt caching | Supported; cache writes cost 1.25x input; TTL option is 30m |
| OpenAI list price (input ≤ 272K) | $10 input / $1 cached / $12.50 cache write / $50 output per 1M tokens |
| Long-context band (input > 272K) | Whole request at 2x input and cache rates and 1.5x output |
| EvoLink price | 10% below OpenAI list; current numbers on the API page |
| Not supported | Fine-tuning, Realtime, Assistants, Embeddings, image or audio generation |
Setup and First Request
Step 1: Get an EvoLink API key
Step 2: Install the OpenAI SDK
pip install openai # Python
npm install openai # Node.jsStep 3: Make the first request
Start with a basic Responses request. OpenAI requires Responses for tool calling; advanced Responses features need separate verification on the EvoLink route.
curl https://api.evolink.ai/v1/responses \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-astra",
"input": "Explain the difference between cache reads and cache writes in one paragraph.",
"reasoning": {"effort": "medium"}
}'from openai import OpenAI
client = OpenAI(
api_key="your-evolink-api-key",
base_url="https://api.evolink.ai/v1",
)
response = client.responses.create(
model="gpt-6-astra",
input="Explain the difference between cache reads and cache writes in one paragraph.",
reasoning={"effort": "medium"},
)
print(response.output_text)
print(response.model, response.usage)import OpenAI from "openai";
const client = new OpenAI({
apiKey: "your-evolink-api-key",
baseURL: "https://api.evolink.ai/v1",
});
const response = await client.responses.create({
model: "gpt-6-astra",
input: "Explain the difference between cache reads and cache writes in one paragraph.",
reasoning: { effort: "medium" },
});
console.log(response.output_text);
console.log(response.model, response.usage);response.model and response.usage on the first call. The returned model string should read gpt-6-astra, and the usage block shows input, cached, reasoning, and output tokens, which is what you will need to reconcile the bill.Text-only requests on Chat Completions
temperature, top_p, or tools:response = client.chat.completions.create(
model="gpt-6-astra",
messages=[{"role": "user", "content": "Summarize this changelog in three bullets: ..."}],
reasoning_effort="low",
)
print(response.choices[0].message.content)Chat Completions vs the Responses API
| Feature | Chat Completions | Responses API |
|---|---|---|
| Text in, text out | Yes | Yes |
| Image input | Yes | Yes |
| Streaming | Yes | Yes |
| Structured outputs | Yes | Yes |
| Prompt caching | Yes | Yes |
| Function / tool calling | No | Yes |
| Async tool calling | No | Yes |
Mid-turn steering (response.steer over WebSocket) | No | Yes |
Change effort mid-conversation while keeping the cache (configuration_update) | No | Yes |
reasoning.mode: "pro" | No | Yes |
temperature, top_p, logprobs | Rejected | Rejected |
If your agent loop lives on Chat Completions today, either move it to Responses or keep it on GPT-5.6, which still supports tool calling there.
previous_response_id does not work for organizations with Zero Data Retention enabled. Send the conversation history explicitly in input instead.Choosing a Reasoning Effort
none or minimal on an earlier model, start at low and compare. Developers who published migration logs in the first days after release converged on medium as the default starting point for coding work; those are community reports, not EvoLink measurements.| Effort | What it is good for | What to watch |
|---|---|---|
low | Extraction, classification, short rewrites, anything that ran at none on GPT-5.6 | Still carries reasoning tokens; not a free tier |
medium | Default for coding tasks, multi-step tool use, document work | Third-party runs show a large quality step over low for a modest cost step |
high | Repository-scale changes, long research chains | Time to first token and token spend rise sharply |
xhigh | Hard agent tasks where high fails the acceptance test | Costly; verify with your own evaluation set |
max | Unconstrained reasoning budget | Third-party measurements show time to first token in the minutes; rarely pays outside offline batch work |
OpenAI documents two additional controls. EvoLink support for each is not yet verified; use the following as upstream reference:
configuration_updatelets a Responses conversation change effort between turns without invalidating the prompt cache. Start atmedium, escalate only the turns that fail.reasoning.mode: "pro"is a separate quality mode on the Responses API; treat it as a distinct evaluation candidate, not a sixth effort level.
Set effort per request in Responses:
response = client.responses.create(
model="gpt-6-astra",
input=[{"role": "user", "content": "Refactor this module and explain each change."}],
reasoning={"effort": "high"},
max_output_tokens=8000,
)Tool Calling on the Responses API
function_call item; execute it and send the result back as a function_call_output.tools = [{
"type": "function",
"name": "get_build_status",
"description": "Return the status of the latest CI build for a branch.",
"parameters": {
"type": "object",
"properties": {"branch": {"type": "string"}},
"required": ["branch"],
},
}]
first = client.responses.create(
model="gpt-6-astra",
input=[{"role": "user", "content": "Is the main branch green? If not, summarize the failure."}],
tools=tools,
reasoning={"effort": "medium"},
)
calls = [item for item in first.output if item.type == "function_call"]
outputs = []
for call in calls:
# run your tool here
outputs.append({
"type": "function_call_output",
"call_id": call.call_id,
"output": '{"status": "failed", "step": "unit-tests", "log_url": "https://ci.example/123"}',
})
second = client.responses.create(
model="gpt-6-astra",
input=[{"role": "user", "content": "Is the main branch green? If not, summarize the failure."}]
+ list(first.output) + outputs,
tools=tools,
reasoning={"effort": "medium"},
)
print(second.output_text)"async": true lets the model continue reasoning while the tool runs. EvoLink support is not yet verified; a working synchronous loop does not establish async support.Structured Outputs and Streaming
text.format:response = client.responses.create(
model="gpt-6-astra",
input="Extract the model ID, context window, and output limit from this text: ...",
text={
"format": {
"type": "json_schema",
"name": "model_spec",
"schema": {
"type": "object",
"properties": {
"model_id": {"type": "string"},
"context_tokens": {"type": "integer"},
"max_output_tokens": {"type": "integer"},
},
"required": ["model_id", "context_tokens", "max_output_tokens"],
"additionalProperties": False,
},
"strict": True,
}
},
reasoning={"effort": "low"},
)
print(response.output_text)stream=True on either surface. With high effort levels the first token can take tens of seconds, so stream in any interactive path and show progress while reasoning runs.Migrating from GPT-5.6
The table below lists OpenAI migration requirements. On EvoLink, verify the request fields and optional features individually before moving traffic; changing the model ID alone does not prove compatibility.
| Change | GPT-5.6 | GPT-6 Astra |
|---|---|---|
| Model ID | gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna | gpt-6-astra |
| Sampling parameters | temperature, top_p accepted | Remove them; the request fails with 400 |
Reasoning effort none / minimal | Accepted | Map to low |
| Tool calling surface | Chat Completions or Responses | Responses only |
| Prompt cache option | prompt_cache_retention | prompt_cache_options: {"ttl": "30m"} |
| Conversation state with Zero Data Retention | previous_response_id | Send history in input |
| Codex CLI | Any recent | 0.153.0 or newer |
The diff for a typical Chat Completions call:
response = client.chat.completions.create(
- model="gpt-5.6-sol",
+ model="gpt-6-astra",
messages=messages,
- temperature=0.2,
- reasoning_effort="none",
+ reasoning_effort="low",
)AGENTS.md more literally, and prefers lists and tables. Early adopters reported the opposite failure too: a small ticket turned into a very large diff. Keep the "minimal change" instruction explicit in the system prompt and keep GPT-5.6 routable for a rollback.Cost Rules: 272K, Caching, Batch and Flex
Rule 1: above 272K input tokens the whole request is repriced
Input and cache rates double and the output rate rises 1.5x for the entire request, not just the tokens past the threshold.
| Request | Input cost | Output cost (20K tokens) | Total |
|---|---|---|---|
| 272,000 input tokens | 272K × $10 = $2.72 | 20K × $50 = $1.00 | $3.72 |
| 280,000 input tokens | 280K × $20 = $5.60 | 20K × $75 = $1.50 | $7.10 |
Eight thousand extra tokens nearly double the bill. Count tokens before sending, compact context when you approach the band, or route the request to GPT-5.6 Sol, whose long-context rate is $8 / $30.
Rule 2: caching pays from the first reuse
k more times:- uncached:
10 × (k + 1)dollars per million prefix tokens - cached:
12.50 + 1 × k
k = 1 that is $20 versus $13.50, so caching wins on the first reuse and the gap widens from there. Keep stable content (system prompt, tool schemas, reference documents) at the front of the input, and note the 30-minute TTL: a session that idles longer pays the write again.Rule 3: Batch and Flex cost half
On OpenAI, Batch and Flex cost 50% of Standard. They are candidates for offline evaluation, nightly processing, and backfills. Fast mode costs 2x, carries no latency SLA for Astra, and is unavailable with EU data residency. EvoLink availability and billing for these modes are not yet verified; do not apply these provider discounts to an EvoLink estimate without route-specific confirmation.
Putting the rules together
configuration_update through EvoLink only after that feature is verified on your route.| Workload | Cheapest safe configuration |
|---|---|
| Interactive coding agent, 50K–150K context | Responses, medium, caching on, context kept under 272K |
| Nightly repository analysis | Batch, high, chunks under 272K |
| Short extraction at scale | Chat Completions, low, or GPT-5.6 Terra / Luna if quality allows |
| Long research chain with retries | Responses, medium with configuration_update escalation, fallback to Sol |
Rate Limits and Fallback
OpenAI publishes Astra rate limits by usage tier. The numbers matter because a single full-context request can exceed a per-minute token budget.
| OpenAI tier | Requests per minute | Tokens per minute |
|---|---|---|
| Tier 1 | 500 | 500,000 |
| Tier 2 | 5,000 | 1,000,000 |
| Tier 3 | 5,000 | 2,000,000 |
| Tier 4 | 10,000 | 4,000,000 |
| Tier 5 | 15,000 | 40,000,000 |
On EvoLink, limits are set per account; check your dashboard before load testing. Three failure modes deserve explicit handling:
- 400 on request shape.
temperature,top_p,noneeffort, or tools on Chat Completions. Fix the request; do not retry. - 429 or 5xx. Retry with backoff, then fall back to
gpt-5.6-solon the same key. The timeout, retry, and fallback guide covers the pattern. - Task stopped by OpenAI's safety monitor. Astra runs under asynchronous misalignment monitoring; when it triggers, the API task stops. Log it, surface it to the operator, and route the task to a fallback model rather than looping.
def call_with_fallback(**kwargs):
for model in ("gpt-6-astra", "gpt-5.6-sol"):
try:
return client.responses.create(model=model, **kwargs)
except Exception as err: # narrow this to 429/5xx in production
last = err
raise lastFAQ
Which model ID do I use for GPT-6?
gpt-6-astra. There is no generic gpt-6 alias on OpenAI or on EvoLink, and the same string works on Chat Completions and Responses.Can I use tools with GPT-6 Astra on Chat Completions?
No. OpenAI documents tool calling for this model on Responses only, while Chat Completions accepts text and image input. Image input through EvoLink still requires route verification.
Which reasoning effort should I start with?
medium for coding and agent tasks, or low for tasks that used none or minimal on GPT-5.6. OpenAI documents per-task escalation with configuration_update; use it through EvoLink only after route verification.Does GPT-6 Astra accept temperature?
temperature, top_p, and logprobs return a 400. Remove them from the request.How is a request above 272K input tokens billed?
The whole request moves to the long-context band: 2x input and cache rates, 1.5x output. Count tokens first and compact or split when you approach the threshold.
What changes when I migrate from GPT-5.6?
temperature and top_p, map none to low, and move tool calls to Responses. OpenAI also documents a changed prompt-cache option. The EvoLink endpoint and key stay the same; verify cache options and advanced features on the route before migration.Is GPT-6 Astra on Amazon Bedrock?
Where do I find EvoLink's price for GPT-6 Astra?
Sources
- OpenAI: GPT-6 Astra model documentation
- OpenAI: GPT-6 Astra model guidance (migration, unsupported parameters, Responses-only tools)
- OpenAI: Reasoning guide
- OpenAI: Prompt caching guide
- OpenAI: Fast mode guide
- OpenAI: Rate limits guide
- OpenAI API pricing
- OpenAI: GPT-6 Astra announcement
- AWS: OpenAI model cards in Amazon Bedrock
- Shinsuke Kagawa: Switching from GPT-5.6 Sol to GPT-6 Astra, start with medium effort


