Reasoning
Reasoning models think before they answer. You choose how hard with reasoning_effort, can read the thinking in reasoning_content, and pay for it as output tokens.
reasoning_effort
Send reasoning_effort with one of none, minimal, low, medium, high, xhigh or max. Any other value is a 400. Each provider supports its own subset, mapped as below; a value the model can’t honour returns 400 with the code validation_reasoning_effort_unsupported.
| Models | reasoning_effort |
|---|---|
| GPT-6 Astra, GPT-6.1 Sol, GPT-6.1 Terra | Passed to OpenAI. minimal becomes low; on GPT-6 Astra and GPT-6.1 Sol, none also becomes low. |
| DeepSeek V4.1 Flash | none (thinking off), low, high, max. medium, minimal and xhigh are refused. |
| Kimi K3.1 Pro, Kimi K3.1 Pro Highspeed | Always thinks. none, minimal and low run at low; medium and high at high; xhigh and max at max. Sampling settings such as temperature are fixed by the model and ignored. |
curl
curl https://api.airuntime.dev/v1/chat/completions \
-H "Authorization: Bearer $TOKENS_PAY_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-astra",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Is 1,000,003 prime?"}]
}'
Python
from openai import OpenAI
import os
client = OpenAI(base_url="https://api.airuntime.dev/v1", api_key=os.environ["TOKENS_PAY_KEY"])
reply = client.chat.completions.create(
model="gpt-6-astra",
reasoning_effort="high",
messages=[{"role": "user", "content": "Is 1,000,003 prime?"}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None)) # the thinking, when the model returns it
print(message.content)
details = reply.usage.completion_tokens_details
print(details.reasoning_tokens if details else "not reported")
Node
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.airuntime.dev/v1", apiKey: process.env.TOKENS_PAY_KEY });
const reply = await client.chat.completions.create({
model: "gpt-6-astra",
reasoning_effort: "high",
messages: [{ role: "user", content: "Is 1,000,003 prime?" }],
});
const message = reply.choices[0].message;
console.log(message.reasoning_content); // the thinking, when the model returns it
console.log(message.content);
console.log(reply.usage.completion_tokens_details?.reasoning_tokens);
reasoning_content
When the model returns its thinking, it is in choices[0].message.reasoning_content, or choices[0].delta.reasoning_content when streaming. The answer stays in content. You can send an assistant message’s reasoning_content back in the next request.
reasoning_tokens and billing
usage.completion_tokens_details.reasoning_tokens reports how many output tokens were thinking, when the provider reports it. It is already counted in completion_tokens: thinking is billed as output, at the model’s output rate. Higher effort usually means more output tokens.
Reasoning models
- DeepSeek V4.1 Flash
deepseek-flash· $0.60 per 1M output tokens - GPT-6 Astra
gpt-6-astra· $50.00 per 1M output tokens - GPT-6.1 Sol
gpt-6-1-sol· $10.00 per 1M output tokens - GPT-6.1 Terra
gpt-6-1-terra· $5.00 per 1M output tokens - Kimi K3.1 Pro
kimi-k3-1-pro· $10.04 per 1M output tokens - Kimi K3.1 Pro Highspeed
kimi-k3-1-pro-highspeed· $20.08 per 1M output tokens