On GPT-5.6 (sol and terra, Responses API), usage.output_tokens appears to be a cumulative re-sum of the running reasoning total — re-added once per reasoning item in output[] — rather than the number of tokens actually generated. The inflated value is what appears on the bill.
No earlier model is affected, because every model before 5.6 emits exactly one reasoning item per response, where the defect is a no-op. That’s why this is showing up now.
Measured over 22,922 reasoning calls from my own logs (1,054 of them on 5.6).
Request shape — nothing exotic enabled
I ask the model for a single chess move. No tools, no multi-agent, no pro mode:
{
"model": "gpt-5.6-terra",
"input": "<a chess position; instructs the model to reply with only a move>",
"max_output_tokens": 128000,
"reasoning": {"effort": "high", "summary": "auto"},
"background": true,
"store": true
}
Every response echoes back tools: [], reasoning.mode: "standard", no multi_agent key, and tool_usage with web_search: {num_requests: 0}. Nothing that could legitimately add output tokens is on.
The symptom
Worst example (gpt-5.6-terra, 2026-07-11 03:31:38 UTC):
| field | value |
|---|---|
status |
"completed" |
incomplete_details |
null |
max_output_tokens (echoed back) |
128,000 |
usage.output_tokens |
466,818 |
usage.output_tokens_details.reasoning_tokens |
21,064 |
| visible assistant output | d1d4 — four characters |
reasoning items in output[] |
41 |
466,818 output tokens cannot be reconciled with 21,064 reasoning tokens plus a four-character answer.
Secondary bug: the reported output_tokens is 3.6x my requested max_output_tokens while status is completed and incomplete_details is null. Per the reasoning guide, max_output_tokens bounds total generated tokens including reasoning, and blowing through it should surface as status: "incomplete" with incomplete_details.reason: "max_output_tokens". 31 of my 710 5.6 reasoning calls report output_tokens over the cap while claiming completed.
The pattern: a triangular re-sum
Let R = reasoning_tokens, k = number of reasoning items in output[]. The reported value fits a cumulative re-sum — i.e. the running total is re-added at every reasoning item:
output_tokens ≈ R × (k + 1) / 2
output_tokens |
reasoning_tokens |
k |
predicted R × (k+1)/2 |
error |
|---|---|---|---|---|
| 466,818 | 21,064 | 41 | 442,344 | −5.2% |
| 382,610 | 18,842 | 37 | 357,998 | −6.4% |
| 363,022 | 18,371 | 36 | 339,863 | −6.4% |
| 344,408 | 18,128 | 35 | 326,304 | −5.3% |
| 344,166 | 18,007 | 35 | 324,126 | −5.8% |
Holds within 5–7% across a 20x range. The residual is consistent with later reasoning segments being larger than earlier ones, so the running total isn’t perfectly linear in k.
Why it’s invisible before 5.6. With k = 1, (k+1)/2 = 1 and the formula returns the correct value. Every pre-5.6 model emits a median of one reasoning item:
| model | calls | median reasoning items | median output_tokens / reasoning_tokens |
|---|---|---|---|
| gpt-5 | 2,134 | 1 | 1.01x |
| gpt-5.1 | 2,429 | 1 | 1.00x |
| gpt-5.2 | 1,594 | 1 | 1.00x |
| gpt-5.4 | 1,388 | 1 | 1.00x |
| gpt-5.5 | 1,269 | 1 | 1.00x |
| o3 | 2,915 | 1 | 1.01x |
| gpt-5.6-terra | 644 | 4 | 3.61x |
| gpt-5.6-sol | 66 | 9 | 6.02x |
5.6 is the first model I’ve seen emit many reasoning items per response, and the inflation tracks that count almost exactly.
It’s billed
Summing the output_tokens the API returned to me, per model, and applying the published output rates reproduces my dashboard line items to the tenth of a cent:
| model | my summed output_tokens |
rate | computed | dashboard line item |
|---|---|---|---|---|
| gpt-5.6-sol | 3,747,903 | $30 / 1M | $112.437 | $112.437 |
| gpt-5.6-terra | 13,856,978 | $15 / 1M | $207.855 | $207.855 |
So billing is computed from the defective field. Using reasoning_tokens + visible output as the honest count, real output cost across these calls was ~$36 against ~$320 billed — about 8.9x.
Input accounting, for contrast, looks correct (my terra input bills below the undiscounted rate, consistent with the cached-input discount). The defect appears isolated to output_tokens.
Possibly related
Three older models report output_tokens at a near-constant 2.0x their reasoning_tokens despite a median of one reasoning item — where the triangular formula predicts 1.0x. Different shape, possibly the same class of accounting defect:
| model | calls | median reasoning items | median ratio |
|---|---|---|---|
| o3-mini | 2,131 | 1 | 2.02x |
| gpt-5.4-nano | 1,152 | 1 | 2.00x |
| o1 | 80 | 1 | 2.01x |
My visible output on those calls is also a single chess move (~4 tokens), so a 2x multiple of the reasoning count isn’t explained by emitted text.
Ask
Can OpenAI confirm whether usage.output_tokens on 5.6 is double-counting, and whether billing is being computed from it? Happy to supply response IDs and full stored response bodies to staff.
Anyone else running 5.6 with reasoning: worth comparing usage.output_tokens against usage.output_tokens_details.reasoning_tokens on your own calls. If your response has more than one reasoning item in output[], the ratio should not be ~1.0x — and if it isn’t, you’re likely paying the difference.
