deepseek-v4.1-flash: DeepSeek V4.1 Flash, the September 10 model behind three API names
deepseek-v4.1-flash is this platform's serving alias for DeepSeek V4.1 Flash, the model DeepSeek released on September 10, 2026. It is the smallest model of a new architecture family. That family is a 552 billion parameter mixture-of-experts on a causal encoder-decoder design. It brings native vision and a 1 million token context window. The naming is why this page exists. On the publisher's own API, three names now reach this one model, and two of them retired the day it shipped. Search results for its name mix in pages about the older V4 Flash generation. That is a different model that still exists as open weights. This page fixes that map first. Then it gives the spec sheet with every number owned by its source, then the request shape that works here. The model id works on this platform today. Requests that name it are served, confirmed by a live request on September 24, 2026. The row is listed in the public models index and on the pricing page as of September 25, 2026, and the posture is stated plainly below.
Last verified: 2026-09-25
What it is
DeepSeek V4.1 Flash shipped September 10, 2026, with the new prices effective 04:00 UTC that day. Per the official release note, it is the smallest model in a new architecture family. It was built, in the note's words, for a higher capability ceiling. The note also names faster inference, higher throughput, and scaling to larger models. The architecture is the real break from the V4 generation. The official model card states it in numbers:
| Fact | Value | Owner of the number |
|---|---|---|
| Backbone | 552B mixture-of-experts; 8B active per input token, 16B per generated token | official model card |
| Architecture | causal encoder-decoder, 40 layers (20 encoder, 20 decoder); 384 routed experts plus 1 shared, 6 active per token | official model card |
| Memory and decoding | Engram conditional memory, 196B; DSpark speculative decoding: semi-autoregressive draft generation with confidence-scheduled verification | official model card |
| Vision | native image-text-to-text; vision encoder and projector fused from the start of pre-training | official model card and release note |
| Context | 1M tokens, trained with sparse attention at 64K and extended mid-pre-training; the publisher's row lists 384K max output | official model card; publisher pricing row |
| Reasoning | a reasoning model; effort control documented on a 1 to 100 scale on the weights | official model card |
| License | MIT, weights and technical report public | official model card |
| First-party alias | deepseek-flash | publisher pricing page |
In plain terms, an encoder reads your input and a decoder writes the answer. Only a small slice of the network fires on any token. That is how a 552B model answers at flash-tier speed and cost. The speculative decoding module works like a fast drafter with a careful verifier. It guesses the next stretch of text and the network checks it. That pushes generation speed up without waiting on the full network for every token. The vision path is not a bolted-on adapter. The card describes images as fused with text from the beginning of pre-training. The card also claims the attention design holds the memory cost of long contexts to about a quarter of the previous flash generation's. That is what makes the 1M window practical rather than theoretical. The weights are public under MIT with a technical report. Like the July snapshot, the release ships no Jinja chat template. A reference encoding script and a toolkit handle the model's input format, and serving stacks configured for the family apply it for you.
Three names, one model: the naming trap
On the publisher's first-party API, three names now reach this model:
| Name on the publisher's API | What it hits today |
|---|---|
deepseek-flash | the current alias; the pricing page's model-version row maps it to DeepSeek-V4.1-Flash, 1M context |
deepseek-v4-flash | retired September 10; still accepted, temporarily routed to V4.1-Flash, served and billed at the Flash price |
deepseek-v4-flash-vision-exp | retired September 10; the same temporary routing |
The footnote on the publisher's pricing page is the load-bearing sentence. Requests to the retired names are served by the V4.1-Flash model and billed at the Flash price. The change log adds the qualifier most pages drop. The routing is temporary, and no end date is published. If your integration holds a retired name, you are calling V4.1-Flash now, whatever your notes say.
And the fourth name, the one that is not this model: DeepSeek-V4-Flash-0731, the July 31 open-weights snapshot. It is a 284B sparse mixture-of-experts text model. It did not stop existing on September 10. The retirement changed first-party routing, not the weights. On this platform it serves under its own pinned alias. Its page carries that side of the family in full. The two models share a family name and a price tier and little else.
| Date | Event in the V4 era |
|---|---|
| 2026-04-24 | the V4 generation launches as previews, the 0423 checkpoints |
| 2026-07-31 | V4 Flash official release: the 0731 open-weights snapshot |
| 2026-08-13 | V4 Pro general availability, the 0813 line |
| 2026-08-21 | V4 Flash Vision Exp, an experimental vision model |
| 2026-09-10 | V4.1-Flash releases; V4 Flash and the vision experiment retire from the hosted API; legacy names route to V4.1-Flash; flash-tier prices are reduced |
Search the model's name with pricing intent and the result page shows the trap live. Rate aggregators and guide pages hold most of the seats, and the publisher's own docs hold two. At least two ranking rows are about the older model. One is a marketplace listing for the previous-generation checkpoint. The other is an aggregator page titled on V4.1 Flash whose address names the older model. A buyer can read about the wrong model and never notice. The defense is the same everywhere. Pin the exact id your door serves. When a family has shipped more than one generation, pin the generation too.
What changed on September 10
Three changes landed together, all recorded in the change log the same day. First, the release itself, effective 04:00 UTC. Second, the retirement of the two V4 Flash names from the hosted API. The temporary compatibility routing is described above. Third, a price event: in the change log's words, with the release of V4.1-Flash, API prices have been reduced accordingly. The flash tier bills on a peak and off-peak split, with off-peak at half of peak. Peak windows run 01:00 to 04:00 and 06:00 to 10:00 UTC on weekdays. Weekends and Chinese public holidays are off-peak entirely. This page quotes the structure and not the amounts. Rates belong to the publisher's dated page and to each host's own card.
One contradiction on the publisher's own pages deserves dating rather than resolving. The release note says V4 Pro is being phased out. From 04:00 UTC on September 14, all deepseek-v4-pro requests would route to V4.1-Flash at V4.1-Flash rates until a V4.1 Pro launches. The change log, published the same day, commits to continuing V4 Pro's API service with its billing method unchanged. A live read of the publisher's pricing page on September 24 still listed and billed the pro name. The flash retirement happened. The pro reroute, as of that read, had not. This page states both facts and asserts nothing about the future in either direction.
Use cases
The architecture and the publisher's release-day table point at the same jobs:
- Agentic and terminal work. The publisher's table puts the model at 90.6 on Terminal-Bench 2.1, 30.0 on Terminal-Bench 3.0, 31.2 on Terminal-Bench 4.0, and 74.2 on DeepSWE v1.1. The route here accepts and forwards the standard OpenAI tool shapes,
toolsandtool_choice, which is the plumbing agent loops run on. - Hard reasoning, math, and code. 90.9 on GPQA Diamond, a 3471 Codeforces rating, 65.6 on MathArena Apex, and 36.8 on HLE rising to 63.9 with tools, all publisher-run. The with-tools rows are the ones that match how you would actually deploy it.
- Security review work. The publisher ran it at 88.1 on CyberGym, 62.8 on SEC-Bench Pro, and 15.3 on ExploitGym; the last number is stated plainly because a low row on an exploit benchmark is itself information.
- Reading documents and images. Native image input plus the card's multimodal rows, 95.6 on DocVQA and 56.5 on MMMU-Pro, make page and chart reading a first-class job rather than a workaround through a separate vision model.
- Long-context loads. A 1M window holds whole repositories, transcripts, or document sets in one request, and the publisher and this platform's own model data agree on the window, so there is no cap-surprise story to tell here.
- What it is not. It is not the 0731 snapshot (that lane serves those weights by pinned id), it is not an image generator, and it is not a casual self-host.
Open weights or a hosted lane: the honest split
MIT makes self-hosting a real option, and for some readers the right one.
Run the weights locally when traffic is steady. It also wins when the data must stay inside a boundary you control, or when you need to fine-tune. Know the lift going in. The release is roughly 763B parameters of files including the conditional-memory module. There is no Jinja chat template, so the encoding reference and toolkit are required reading before any raw serving. And the publisher's own note says inference support and deployment options for the new architecture are still being worked out with the open-source community. Early local runs on this architecture should be treated as pioneering, not routine.
Call a hosted lane when traffic is bursty, you want the window without cap surprises, or you want metering wrapped around the model. That means per-call cost stamped on every response, a prepaid wallet as the backstop, and per-key revocation. On this platform the model id serves today, and the row is listed in the public catalog.
API usage
The route is POST /v1/chat/completions, Bearer-keyed from the console, OpenAI-compatible in shape, base URL https://api.ironstratum.com/v1. The model id is deepseek-v4.1-flash. The full parameter surface sits in the API reference; the fields that matter day to day:
| Field | Notes |
|---|---|
model | deepseek-v4.1-flash |
messages | standard OpenAI message shapes |
stream | streaming and non-streaming both work on the route |
max_tokens / max_completion_tokens | both accepted, identical behavior |
tools, tool_choice | standard OpenAI tool shapes, forwarded as sent |
reasoning_effort | accepted at this parameter: minimal, low, medium, high |
Three laws of this lane save debugging time:
- Pin the id, not the family name. The retired names belong to the publisher's compatibility routing, not to this platform. The bare name
deepseek-v4-flashis not an alias here at all: this platform's V4-era flash lanes are the suffixed 0731 snapshot and this row, and each id names its model. An id that names its model is the whole defense against the naming trap, on every door. - The listing, stated exactly. The model appears in the public models index, on the pricing page, and in the
/v1/modelslisting, as of September 25, 2026. Before that date the id still served by direct request: a September 24, 2026 request returned 200 with a full usage payload, cached-token fields included, and the metering ran. The listing posture of this page and the catalog now agree. - Metering and the wallet. Usage meters per token against a prepaid wallet: input, output, and cached input at its own lower leg. Every response carries a
usageobject with the retail cost of that call. The balance is the spend stop: a request arriving after the balance is gone is refused with a named error and bills nothing. Keys are revocable singly, and per-key spend caps are roadmap, not shipping. The model's rates render on the pricing page.
curl
curl -X POST "https://api.ironstratum.com/v1/chat/completions" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Two clocks start at noon. One gains 40 seconds per hour, the other loses 25. When do they next agree? Show the check."}
],
"max_tokens": 2048
}'
python
import os
import requests
resp = requests.post(
"https://api.ironstratum.com/v1/chat/completions",
headers={"Authorization": "Bearer " + os.environ["KEY"]},
json={
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Read this error chain and name the root cause: retry storm, then queue overflow, then 503s."},
],
"max_tokens": 4096,
},
timeout=300,
)
resp.raise_for_status()
message = resp.json()["choices"][0]["message"]
# When reasoning content comes back it lands in its own field, separate
# from the answer, and meters as output tokens.
print("reasoning:", (message.get("reasoning_content") or "")[:400])
print("answer:", message["content"])
print("usage:", resp.json()["usage"])
openai-sdk
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.ironstratum.com/v1",
api_key=os.environ["KEY"],
)
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{"role": "user", "content": "Draft the migration note for renaming a retired model alias in a client library."},
],
reasoning_effort="low",
max_tokens=4096,
)
print(response.choices[0].message.content)
An integration already on the OpenAI SDK moves with two lines: the base URL and the model id. The publisher's own API is OpenAI-compatible too, so first-party integrations transfer the same way. One difference is worth repeating: the first-party alias is deepseek-flash, while this platform's alias names the model itself.
Benchmarks
Every number in this section is the publisher's own, from the September 10 release-day table. The runs used the instruct model's max reasoning effort per the card's label. The parenthetical HLE number is the text-only subset, as the publisher footnotes it. The table appears in two official places, the change log and the model card. At our September 24 read the two agree on every cell except one. NL2Repo-Bench prints 65.4 in the change log and 64.0 on the card, and this page prints the change log's value. None of it is this platform's measurement.
| Benchmark | V4.1-Flash |
|---|---|
| GPQA Diamond | 90.9 |
| HLE (full set; text-only subset) | 36.8 (39.1) |
| HLE with tools | 63.9 |
| Codeforces, rating | 3471 |
| MathArena Apex | 65.6 |
| Terminal-Bench 2.1 | 90.6 |
| Terminal-Bench 3.0 | 30.0 |
| Terminal-Bench 4.0 | 31.2 |
| DeepSWE v1.1 | 74.2 |
| ProgramBench | 20.3 |
| NL2Repo-Bench | 65.4 |
| CyberGym | 88.1 |
| SEC-Bench Pro | 62.8 |
| ExploitGym | 15.3 |
| Automation-Bench | 54.8 |
| Agents' Last Exam | 31.8 |
| Chartography, with tools | 78.9 |
| BabyVision, with tools | 89.6 |
| ZeroBench-main, with tools | 49.0 |
The release note's own summary is that results sit ahead of flagship models, including the V4 Pro tier. It adds that early third-party tests reportedly put the model ahead of that tier. The claimed edges are performance, cost, speed, and total runtime. Both sentences are the publisher grading its own release, quoted as such.
For the cross-generation question, three benchmark names are shared cleanly between the September 10 table and the July 31 card's table. The two tables were published six weeks apart:
| Shared benchmark | V4.1-Flash, Sept 10 | V4 Flash 0731, July 31 |
|---|---|---|
| Terminal-Bench 2.1 | 90.6 | 82.7 |
| CyberGym | 88.1 | 76.7 |
| Agents' Last Exam | 31.8 | 25.2 |
Read that with its caveat in the same breath. These are two publisher tables, six weeks apart, under different methodology notes. Some same-named rows differ in version or variant between them, DeepSWE v1.1 against DeepSWE for one. The direction is consistent on every shared row. The deltas are not a controlled experiment. If a workload matters, run it on your own tasks, on this platform or any other.
Getting started
- Open an account. The signup page runs the invite flow while the platform is in beta; an account can call every served model the day it appears.
- Issue an API key. One key per project, each an independent off switch: revoke a compromised key and the rest keep serving.
- Understand the meter before the first token. Per-token legs with cached input at its own leg, a usage cost on every response, and the wallet balance as the spend stop. Its rates are on the pricing page, rendered from the same model data the meter reads.
- Make the first call. Lift the curl tab, put your key in
KEY, and hold the request small so the reply lands fast. Once one call returns with its usage object, scaling is a longermessagesarray.
The chat catalog lays out the platform's chat lanes. The models index carries the catalog's current state, with this row in it.