deepseek-v4.1-flash names
weights and a service level; it does not name a company, and neither does anything in the
response.
This page is about that boundary — what you can see, what you cannot, and why the second
list is on purpose.
What you can see
x-provider-class answers the question that actually affects you — did I get the first
choice, or a standby? — without answering the one that does not. A run of fallback
alongside slower responses is worth telling us about, with the request ids.
x-config-version is only useful comparatively: two calls that behaved differently under
the same version point at something other than routing.
What you cannot see, and why
Nothing in the response names who ran the model. Not a header, not a field, not an error message. That is a rule the error catalogue is checked against, not a convention. Three reasons, in the order they will matter to you:Your integration does not move
When capacity for a model shifts, your code does not change. There is nothing to
change — you were never given the name that would have needed updating.
Capacity can be plural
One model may be servable from several places at once. A single vendor name would be a
lie on some calls and unstable on the rest.
A name invites a dependency
Published names get branched on. Then a routing change becomes a breaking change for
people who were never promised anything.
What this means in practice
owned_byis an account, not a vendor. OnGET /v1/modelsit says which account a model belongs to — the platform’s own, or yours.- A retry may land somewhere else. After
UPSTREAM_RATE_LIMITEDorUPSTREAM_UNAVAILABLE, a retry may be served by a standby. That is the mechanism working, and it is why those codes are retryable. Before the first token, the platform already tries standbys itself: at most five upstream attempts per request in all. - Model names never mirror an upstream catalogue. If a name you know from elsewhere does not work here, that is the reason — look it up rather than translating it. See Models and resource names.
- Error messages stay ours. An upstream failure is reported as
UPSTREAM_UNAVAILABLEorUPSTREAM_TIMEOUTwith our wording, never with a third party’s text.
Letting the platform choose: auto
auto is Prentis One. Its open-weight-only sibling auto-open (Prentis One Open), how the
two compare, and their limits and billing are on the Prentis One page; this
section covers auto.
auto is rolling out gradually. Where it is not yet available, it answers
MODEL_NOT_FOUND like any unknown model name, and GET /v1/models does not list it."model": "auto" (the same router as accounts/maas/routers/auto) on any of the four
inference endpoints, and the platform picks a model for each call. It looks at what the call
is about and how hard it is. Then, among the models your key may call and that can take this
request (tools, images, response format, parameters, context length), it picks the most
capable one. If that model fails before it has sent anything, the call moves on to the next
choice. The whole call still makes at most five upstream attempts, each of at most 120
seconds.
Your key needs
auto in its allowed models, and every model you list after auto: has to be
allowed too.
Same boundary as everywhere else. The response, every stream chunk and every error name
what you wrote: auto, or your auto:… string. Which model answered is not shown, and your
usage and billing pages show it as Prentis One. The one extra header is x-router-trace-id, the id of
the choice. Quote it with x-request-id when you ask us why a call went where it did.
Conversations stay on one model. Switching models mid-conversation costs you prompt-cache
hits and consistency, so the platform keeps a conversation where it is when it can:
- a turn that hands back a tool result goes to the model that asked for the tool;
- a new turn stays on the previous model while that model is still among the best two for it.
- the
x-session-affinityheader; - the request’s
prompt_cache_key; - failing both, the system prompt and first user message.
x-session-affinity on every turn if you want to be sure. A conversation is
remembered for an hour after its last turn.
Billing. Tokens are billed at the price of the model that answered, exactly as if you had
called it directly. A call that auto had to classify carries a small routing fee:
the classifier’s input tokens, currently $0.042 per million (a reference price that may change). It shows as its own line under Prentis One.
There is no fee when you name a single model with auto:<model>, on a tool-result turn that
continues a conversation, or when the classifier could not answer.
Known limits. Switching providers mid-conversation can still lose prompt-cache hits and
reasoning continuity. auto chooses for capability, not for cost or speed.
Reporting something
Quotex-request-id. It is enough on its own — we can see which route a call took, what
it cost and where the time went, without you having to guess at any of it.
Next
Models and resource names
How to write the name in the first place.
Data handling
What is kept, and what is never written down.