$0.30 per million tokens. That is the number Revolut’s David Abitbol put on stage at AI Engineer NYC on October 13 for the coding model that now serves roughly 2,000 of the bank’s engineers, and it is why The Register’s November 3 write-up ran under a headline about cutting AI coding costs tenfold by dropping Claude and going self-hosted. Per the talk listing, the invoice is now about a tenth of what Revolut used to pay Anthropic and OpenAI.
The tempting lesson is “switch to an open model.” The arithmetic says something narrower. Revolut made two changes at once: it changed the model (Claude to Z.ai’s GLM) and it changed the billing shape (per-token API to a fixed block of GPUs). Run the list prices and almost all of the saving comes from the second change, and the second change only pays if you can keep the GPUs busy. This guide separates the two so you can work out which one, if either, applies to your team.
What Revolut actually did
The details come from three places: the talk page, The Register’s report, and a detailed set of notes from the 12-minute talk published by Sparse Notes. Where they disagree, I say so.
- The sequence. Gemini came first, then Claude Code under strict per-engineer budgets, then in April 2026 self-hosted GLM 5.1 with no token limits. The production model is now GLM 5.3. Abitbol told the conference that early on “We were seeing engineers spend $1,000 a month, $10,000 a month with not so much ROI,” per The Register.
- The hardware. 56 Nvidia B200s, the equivalent of seven eight-GPU nodes, for about 2,000 engineers. Neither the talk page nor The Register says whether Revolut owns them or rents them; the Sparse Notes summary says the deployment runs on dedicated inference capacity from Together AI, which I could not confirm in any Revolut or Together material.
- The model. The GLM-5.3 model card on Hugging Face lists 753B parameters and a custom “glm-5.3” license rather than MIT, so read the license file before you copy this setup. GLM is text-only, so Revolut routes image work to other models while the agent loop stays on GLM.
- The data path. Weights are downloaded and run outside China; per the Sparse Notes summary, no request goes to a Chinese endpoint, the provider retains nothing, and processing is limited to the US, EU, UK and Israel.
- The reported gains. Roughly 60% better coding time and 70% better lead time after the GLM rollout. The talk page itself notes these are not isolated from other causes, and the rollout coincided with removing token budgets. Treat them as Revolut’s internal measure, not a benchmark.
That last point matters more than it looks. Abitbol’s own reading, per the notes, is that the biggest gains came from engineers using agents freely on debugging, Jira and Confluence work once nobody was counting tokens. A fixed-cost cluster makes the marginal token free, and free tokens change behavior. Some of the productivity story is a budget story.
Swapping the model alone barely moves the bill
Here is what happens if you change only the model and keep paying per token. The prices below are current list rates from Anthropic’s pricing page, Z.ai’s own price list, and the US Bedrock rate for GLM-5.3 as shown on Pi’s model listing. The Bedrock route matters because a regulated buyer who will not send code to a China-based API needs a host somewhere else.
To compare them on a coding-agent workload, I used a sample unit of 100 million input tokens with a 90% cache hit rate (the target Revolut gives for coding traffic) plus 2 million output tokens. Cache write charges are left out to keep it readable. These totals are the site’s own arithmetic, not anything Revolut published.
| Route | Input / cache hit / output, per 1M | Cost of the sample unit |
|---|---|---|
| Claude Opus 5.5 (API) | $4 / $0.20 / $20 | $98.00 |
| Claude Sonnet 5.5 (API) | $2 / $0.10 / $10 | $49.00 |
| GLM-5.3 on Z.ai’s API | $1.40 / $0.26 / $4.40 | $46.20 |
| GLM-5.3 on Bedrock US | $1.848 / $0.3432 / $5.808 | $60.98 |
| Revolut’s stated self-hosted rate | $0.30 blended, cache hits free | $3.60 |
Three things stand out. Moving from Opus 5.5 to GLM through an API roughly halves the bill, which is real money but nowhere near 90%. Moving from Sonnet 5.5 to GLM saves almost nothing, because Anthropic now prices cache hits on Opus 5.5 and Sonnet 5.5 at 0.05x base input, cheaper than GLM’s cached rate, and agent traffic is mostly cache hits. And the non-Chinese GLM host costs more than Sonnet on this mix.
So if your plan is “Claude Code is expensive, let’s point the harness at an open model’s API,” expect a saving somewhere between zero and half, depending on which Claude tier you were on. The other forty points of Revolut’s saving live in the last row, and that row is not a price anyone sells you. It is a result you earn.
The $0.30 is a utilization number
A dedicated GPU bills by the hour whether it is answering prompts or not. Together AI’s dedicated endpoint pricing lists a B200 at $8.99 per hour on demand, with reserved capacity at an unpublished lower rate. Using that public figure as a stand-in (Revolut has not disclosed its rate, and a reserved or owned cluster would cost less):
- 56 B200s × $8.99 × 730 hours ≈ $367,500 a month, or about $4.4 million a year.
- To make $367,500 work out to $0.30 per million billable tokens, the cluster has to process about 1.2 trillion uncached tokens a month. Across 2,000 engineers, that is roughly 600 million each.
Run the same 1.2 trillion billable tokens through Opus 5.5 at the sample mix above and the API bill lands near $10 million a month. A tenth of that is in the neighborhood of the GPU bill. Again, my arithmetic, built on a public list price; it shows the claim is internally plausible, not that these are Revolut’s numbers.
The practical consequence is the minimum ticket. The talk notes say GLM fits on four GPUs but runs better on eight because the extra memory goes to KV cache. One eight-GPU replica at that list rate is about $52,500 a month, and anyone serving a team of engineers wants at least two for failover. If your organization spends less than roughly $100,000 a month on coding-agent APIs, a dedicated B200 cluster at list rental prices costs more than the bill it replaces, before you count the engineers who run it.
Paying for the busy hour
One detail from the talk deserves more attention than the headline figure. Revolut’s target is above 200 tokens per second per user, but engineers who sign on after 5 p.m. see closer to 800, because the GPUs are idle.
At a large telecom, the network is sized for the busy hour. You buy enough trunk and backhaul capacity to carry the worst sixty minutes of the worst ordinary day, and for the other twenty-three hours most of it sits waiting. Traffic engineers spend careers trying to move load into the trough, because that is the only way to lower the cost of the capacity you have already bought. I see the same curve in the sovereign AI infrastructure we are building now: the inference cluster is busiest when people are at their desks, and its cost per useful token is set by how full you keep it at 3 a.m.
That gives a self-hosting team three levers the per-token buyer does not have:
- Fill the trough on purpose. Test generation, dependency upgrades, documentation refreshes, large refactors and eval runs can be queued for evenings and weekends. Every token processed at night lowers the blended rate for the daytime ones.
- Shrink outside the peak, if your contract allows. Rented dedicated capacity that bills per minute can scale replicas down overnight; Together’s dedicated endpoint docs say each replica “stops billing as soon as it scales down.” Owned hardware cannot. Reserved terms usually trade that flexibility for the lower rate.
- Size to a latency target, not to a token count. Revolut’s number is time to first token. Abitbol told the conference, “As soon as you exceed 5 seconds, my Slack inbox starts to blow up,” per The Register. That is a busy-hour service level, and it tells you how many replicas you need.
The tuning that got 56 GPUs to carry 2,000 engineers
Per the talk page, Revolut raised request throughput by 76% and cut time to first token by 88%, from 14.26 seconds to 1.68 seconds, on the same 56 GPUs between April and August. The notes credit most of that to serving configuration rather than hardware. If you do self-host, this is the order I would work through it:
- Cap the context window. GLM-5.3 can be served at very long context, but every token of context reserved per session eats KV cache that another engineer could use. Abitbol’s line, per The Register: “Long context is a scam. You really need to be mindful of that.” Revolut caps at about 256K.
- Quantize to the hardware. On Blackwell, NVFP4 instead of FP8 cut the GPU footprint by about 40%, by the talk page’s account. Run your own coding evals before and after; “no accuracy loss” is Revolut’s finding on Revolut’s tasks.
- Spend spare memory on KV cache, not on fitting the model. That is the reason to prefer eight-way tensor parallelism over four even when four fits.
- Make cache hits a metric. The talk’s target for coding work is above 90%. Sticky sessions, which route an engineer’s requests back to the replica that holds their prefix, are how you get there.
- Disaggregate prefill and decode last, and patch it. Splitting the two phases helped Revolut. It is also the code path behind the cross-customer KV cache exposure Cloudflare disclosed on October 26, which traced to a bug in SGLang’s disaggregated mode; I covered it in our piece on where to run open models after that leak. When you self-host, the serving stack’s security patches are yours to apply.
Questions to answer before you copy it
The Revolut case is a good one precisely because the numbers are specific. Before treating it as a template, answer four questions with your own figures:
- Which Claude or GPT tier is your spend on today? If most of it is Sonnet-class with high cache hit rates, the model switch alone saves little. Pull a month of usage and reprice it with the table above.
- Is your monthly coding-API spend above the cost of two replicas plus the people to run them? Below that line, rent tokens. Our earlier guide on whether to run Meta’s open model on your own hardware reached the same answer at desktop scale.
- Can you keep the cluster busy outside office hours? If you have no batch work to queue, budget for the trough or rent capacity that scales down.
- Which work stays on frontier models? Revolut kept Codex, Claude Code and Gemini available for tasks where they are clearly better, and routes image work elsewhere. Write that exception list before migration day, and measure it, as covered in our guide to building evals instead of trusting leaderboards.
Revolut also did the governance work that made the move defensible for a regulated bank: a sandbox that requires human approval for any command outside an allowlist (grep yes, Gradle no, per the talk notes), zero retention at the inference provider, OpenTelemetry logging of agent activity, and a deliberate classification of the coding agent as a human-in-the-loop productivity tool. That is the same containment pattern laid out in our guide to agent sandbox and network boundaries, and it is the part most teams skip when they chase the $0.30.
The honest summary of Revolut’s case: an open model made the bill smaller, a fixed cluster made it much smaller, and removing the budget made engineers use the thing. Only the first of those is free to copy. The second is a capacity bet that pays at Revolut’s scale, and the third works with any vendor if you are willing to stop rationing tokens. For the wider vendor-pricing picture, see how Anthropic’s discount terms are losing coding workloads, and for the per-token side of the bill, our breakdown of cache hit rates.
