Why does a reasoning model return an empty answer, and why are thinking tokens charged?
In short: A reasoning model writes out its own chain of reasoning before it writes the answer. That text is model output too: it comes out of the max_tokens budget and is charged at the output price. If the budget covers the thinking but not the answer, the response ends empty with max_tokens or length as the reason. That's why the Wiozen API docs recommend max_tokens of 16,000 or more.
What is a thinking token, and how is it different from the answer?
On a hard question the model first breaks the problem down, writes intermediate steps, notices a wrong path and backs out of it. This draft arrives as a thinking block in the Anthropic format, as the reasoning_content field in the OpenAI format, or isn't shown at all. Shown or not, every thinking token the model produces is output.
On an easy question the model often doesn't think at all, or gets by with a few hundred tokens. Finding contradictions in a legal text or planning a large code change can take thousands of thinking tokens, and it's normal for the thinking to be longer than the answer.
Why is thinking charged at the output price?
Every model on the Wiozen API has four prices: input, cache-read input, cache-write input and output. There is no separate line for thinking; the model produces thinking and answer the same way, token by token, so both count as output. The Output column on the Usage page of your dashboard includes thinking tokens.
Here's the math: if deepseek-v4.1-flash thinks for 8,000 tokens and writes a 1,000-token answer, you pay for 9,000 output tokens. At the October 30, 2026 catalog price ($0.60 per 1M output tokens) that's $0.0054. A response of the same length on claude-opus-5-5 ($14.00 per 1M output tokens) costs $0.126. If you see a surprisingly high output count for a short answer, thinking is usually why.
Why is the answer empty?
max_tokens caps thinking and answer together. Give it 2,000 on a hard question and the model may spend all 2,000 on thinking and never get to the answer. The response has no text, and the finish reason is one of these:
stop_reason: "max_tokens"in the Anthropic formatfinish_reason: "length"in OpenAI Chat Completionsstatus: "incomplete"in the Responses API
The fix is a bigger budget. It also helps to catch this case in your code and retry or warn, instead of showing the user a blank screen:
from openai import OpenAI
client = OpenAI(base_url="https://api.wiozen.com/v1", api_key="sk-gw-...")
r = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Find the contradictions in this contract: ..."}],
max_tokens=16000,
)
choice = r.choices[0]
if choice.finish_reason == "length" and not choice.message.content:
print("The budget went to thinking, raise max_tokens")
print(r.usage.completion_tokens, "output tokens (thinking included)")Do I pay for an empty answer?
It depends on the model. On wiozen-anthropic, a request that ends without any answer text isn't charged; it shows on the Usage page with a cost of $0.00 and your balance doesn't change. On the Claude, Gemini and DeepSeek models, the model has processed the input and produced the thinking, so the token counts the model reports are charged. If the model reports no tokens at all, the request is still free.
So asking a hard question on an expensive model with a small budget can mean paying without getting an answer. Setting a large enough budget up front saves both the answer and the money.
How do I set thinking on Claude 5.5?
The Claude 5.5 models don't think unless you send a thinking field. Many tools and SDK examples still send the old form: {"type": "enabled", "budget_tokens": N}. These models don't accept it, so Wiozen turns the request into adaptive thinking and maps the budget to an effort level:
budget_tokens you send | Model effort level |
|---|---|
| under 4,000 | low |
| 4,000 to 16,000 (or not given) | medium |
| over 16,000 | high |
With adaptive thinking the model decides how much to think based on the question, and may skip thinking on easy ones. If you send output_config.effort yourself, your value is kept. Thinking tokens are still charged at the output price here, so keep high effort for work that really needs it. For picking a model, see which AI model should I choose.
Frequently asked questions
Are thinking tokens priced separately?
No. Thinking counts as output and is charged at the model's output price.
What should I set max_tokens to?
16,000 or more on reasoning models. With a smaller value on a hard question, the budget can run out during thinking and the answer comes back empty.
Do I pay for an empty answer?
Not on wiozen-anthropic. On the Claude, Gemini and DeepSeek models, the tokens the model processed and reported are charged.
Where can I see thinking tokens?
Inside the output count in the response's usage field, and in the Output column of the Usage page in your dashboard.
Will I get an error if I send budget_tokens to Claude 5.5?
No. Wiozen converts the old form to adaptive thinking; your budget becomes a low, medium or high effort level.
You can see each request's output tokens and cost on the Usage page of your dashboard; prices are on the Models page.
More guides: How can you use an AI API from Turkey without a credit card? · How do you connect an OpenAI-compatible API to a tool you already use? · How do you calculate the cost of an AI API? · What should I do if my AI API key has leaked? · How do you generate images with an AI API, and what does one image cost? · Why does my AI API return a 429 error, and how do I fix it? · Why do long AI API requests time out: streaming or non-streaming? · Anthropic Messages API or OpenAI Chat Completions: which one should I use? · What is a context window, and what is a 1 million token context good for? · Which AI model should I choose: deciding by price, context and quality · Why is my API balance running out faster than expected? Tracking spend request by request · How do you convert a web page to Markdown to feed it to an AI model? · How do you get AI to write and publish articles in WordPress automatically? · How do you find blog topics from RSS feeds and Google Trends? · Does AI-written content show up on Google and in AI answers? · How do you get internal links into AI-written WordPress articles? · How do you get AI to generate a different featured image for every WordPress post? · How do you write a content brief when an AI writes your blog posts? · What should you watch for when an AI writes recipes for your food blog? · How do you fix errors when connecting a WordPress plugin to your AI API account? · Why does my AI article bot stop halfway in WordPress? "Run is stuck" and LiteSpeed · Why are my scheduled WordPress posts late? WP-Cron and a real server cron · How do I get an AI article bot to write blog posts in English or another language? · What does "Content Bot cannot generate articles" mean? Reading the bot's log