Asking for it
reasoning_effort is an ordinary field in the request body and travels to the
provider as you wrote it, like every other parameter. So is anything else a
provider takes to control how much thinking it does. There is no Uniblock control
for reasoning and nothing of ours is added to your body.
Which values a model accepts is the model’s business, and a value it will not
take comes back as the provider’s own refusal rather than as one of ours. See
Request parameters.
Reasoning tokens are inside the completion count
This is the sentence to read twice.completion_tokens, not a figure to add to it. When
a provider reports them, the count arrives separately as well, as a second view
of tokens already counted:
reasoning_tokens to completion_tokens would count them twice.
The same figure reaches your usage record and the Activity screen as the
reasoning count for that request. See
Usage and metering.
Absent is not zero. reasoning_tokens is omitted rather than sent as 0
when the provider did not report it, so a missing field means we were not told
rather than none were used. A model that does no reasoning at all produces a
usage line without the field.
What reasoning costs
Reasoning is one of the five kinds of token a model’s rate is expressed in, and it earns a price of its own because providers price it separately:max_tokens matters more here than anywhere else
Two reasons, and they pull in opposite directions.
A reasoning model can spend your whole ceiling thinking. Reasoning tokens
count against max_tokens on most providers, so a ceiling that is comfortable
for an ordinary model can be consumed before the answer starts. What you get then
is a reply that is empty or cut off, with finish_reason reading length, and
you have paid for the reasoning. Check finish_reason before you parse anything.
A request naming no ceiling holds the model’s published maximum. Credit is
held against a ceiling while a request runs, and with no max_tokens in the body
that ceiling is whatever the model publishes as its maximum output, which on a
reasoning model is often large. The hold comes back in full at settlement and you
are charged for what was produced, but while the request is in flight it occupies
that much of your account spend rate cap. See
Rate limits and spend controls.
So send max_tokens, and send one with room for the thinking and the answer
both.