Inference
Video results are single-download, and expire after an hour
- A clip is deleted when you download it. The first successful retrieval returns the video, then removes the clip and the prompt that made it. A second request returns
410 job_already_retrieved, so save the bytes on the first download rather than re-fetching. - An uncollected clip expires after one hour, not 24. After that the job returns
410 job_expired.
Inference
Usage lookup by request ID works again
Looking up a request’s usage by theid returned in the response briefly returned 404. It resolves again, and charges were always correct — nothing was billed twice or went unbilled. Requests made while it was broken stay unqueryable by id; their usage is still counted in your billing totals.Inference
reasoning_effort now works on hybrid models, and tool calling on the Responses API
reasoning_effortis honoured on eight models that used to drop it. These models have a reasoning on/off switch but no depth dial, so a request carryingreasoning_effort— the parameter the OpenAI SDKs, coding agents and OpenRouter all send — produced no reasoning at all. An effort oflow,medium,high,xhighormaxnow turns reasoning on, and the response says so with a new header —x-flexai-adjusted-params: reasoning_effort=on, orreasoning=onif you sent it as OpenRouter’sreasoning.effortor through/v1/responses— because the depth itself cannot be adjusted.noneandminimalleave it off, which is what you asked for. Turning reasoning off explicitly still wins over a depth: sendthinking: {"type": "disabled"}, orenable_thinking: falseinsidechat_template_kwargs, and the effort you set aside is reported inx-flexai-dropped-params. The models areGLM-4.5-Air-FP8,NVIDIA-Nemotron-3.5-Lightning-30B-A3B,Qwen3-8B-FP8,Qwen3.5-9B,Qwen3.6-27B-FP8,Qwen3.6-35B-A3B-FP8,gemma-4-26B-A4B-itandgemma-4-31b-it.- Tool calls from
GLM-4.5-Air-FP8are no longer buried in the reasoning output. On a non-streaming/v1/responsescall with thinking off, the whole reply — tool call included — could come back as a single reasoning item, so an agent saw no call to make. When the reply is nothing but that mislabelled call, it now returns the leading text as a message item followed by onefunction_callitem per call. Anything else is left exactly as the engine sent it, so a forcedtool_choiceor a reply cut short atmax_output_tokensis not repaired. Chat completions were already correct; the streaming Responses path got a separate fix in this release, for forced tool choice. - When we override
parallel_tool_calls, we now tell you. Sendingtool_choice: "required"toGLM-5.2,MiniMax-M2.7orNVIDIA-Nemotron-3.5-Lightning-30B-A3Bforcesparallel_tool_callstofalse. If you senttrue, that used to change silently; the response now carriesx-flexai-dropped-params: parallel_tool_calls. Sendingfalse, or omitting it, is not an override and adds no header. - An unrecognised
/v1/responsesinput item type is rejected with the index that caused it. Previously it reached the engine and came back as a bare “Invalid request.” with nothing naming the offender. You now getinput[i].typepointing at the item. Types the Responses API defines —reasoning,item_reference, hosted-tool calls — pass through unchanged. - Recommended sampling defaults, where a model has them. A model can now carry a default for the sampling fields you leave unset. The first is
DeepSeek-V4-Flash-0731, which may filltop_p0.95 — the value its model card recommends for agentic use — when you do not send one. Any value you send always wins, includingtemperature: 0. When we fill a field, the response names it:x-flexai-sampling-defaulted: top_p.
Platform
Billing emails follow your top-ups, and EU accounts bill in euros
- If you pay by top-up, low-balance emails now follow your last top-up rather than the calendar month. Each top-up arms a fresh pair of alerts: one “running low” when the balance falls below a fifth of what it was right after that credit, and one “out of credit” at $0. Your next top-up re-arms both. The old behaviour was a percentage of the month’s spend, which moved every time you topped up, reset on the 1st, and fired every month for accounts on auto-recharge that had nothing wrong.
- With auto-recharge on, you get only the “out of credit” email. The running-low warning is skipped, because the rule exists to top you up before it would fire. If you do reach $0 with auto-recharge enabled, that email means a recharge did not go through — usually a declined card or a cap being reached — and is worth acting on.
- Postpaid accounts now get budget alerts at 80% and 100% of their cap, where there used to also be one at 50%.
- The “card added” confirmation email is gone. Adding a card is visible in the dashboard immediately.
- Accounts in the EU region are charged and invoiced in euros. Prices, usage and your wallet balance stay in US dollars; a euro top-up is converted once, when the card is charged, at a reference rate fixed for the calendar month and recorded against that payment. Nothing is re-converted afterwards, so credit you have already bought does not move with the exchange rate. Full detail is on the Regions page in the Inference API reference.
Inference
New model: Qwen3.8 Flash Next
Qwen3.8 Flash Next has been serving on the Inference API since 28 September — $0.15 per million input tokens, $0.47 per million output, with a 262K-token context window.Call it by its id through the usual endpoint:Inference
Token Factory changelog
Changes to the Token Factory are now published here — models arriving and leaving, pricing changes, and changes to the API.For what is serving right now,GET /v1/models remains the authoritative list and carries current per-token pricing for every model on it.Inference
New models: GLM 5.3 Flash and Qwen3.8 27B
Both are serving now on the Inference API, and both read images as well as text.- GLM 5.3 Flash — $0.075 per million input tokens, $0.25 per million output, with a 1M-token context window.
- Qwen3.8 27B — $0.42 per million input tokens, $3.00 per million output, with a 262K-token context window.