Research
OpenRouter pricing vs going direct: the fee is small, the host is not

OpenRouter charges a 5.5% fee when you buy credits on its Standard plan and passes on each provider's list price with no markup, so going direct at the same token prices saves you that 5.5%. In our measurements, the host mattered far more than the fee, since the same model's input price varied 13-fold from one host to another and another model's answers took anywhere from half a second to 44 seconds.
We route all caption translation in Verli's multilingual rooms through OpenRouter, and for our rooms the fee is too small to make us leave. We measured what the fee adds, how much hosts differ and how much they change within a single day, and what renting your own GPU would have to beat. We also explain why we pin each request to a host we chose instead of letting OpenRouter pick one.
What OpenRouter charges
OpenRouter takes 5.5% on credit purchases on its Standard plan and 8% on Business, and it bills inference at the provider's list price on every plan.
| Plan | Fee | What it adds |
|---|---|---|
| Free | none | 25+ free models, 50 requests a day |
| Standard, pay as you go | 5.5% on credit purchases | 600+ models, routing by data policy, prompt caching |
| Business, pay as you go | 8% on credit purchases | EU and US in-region routing, 1,000 workspaces |
| Enterprise | discounts by contract | invoicing, SLAs, single sign-on |
| Bring your own key | none up to $25,000 a month, then 5% | the provider bills you directly |
From OpenRouter's pricing page, read in November 2026.
The pricing page says: "Inference is billed at the provider's list price on every plan." You pay the fee when you buy credits, not per request.
OpenRouter does not charge for the model tokens of an attempt that fails with an error. OpenRouter can still bill you for services that already ran for that attempt, such as web search. With OpenRouter's own fallback, you pay only for the attempt that answered. If your own code receives an answer and then rejects it, OpenRouter bills that answer like any other.
Bring your own key lets you add a provider's API key to OpenRouter and use OpenRouter's API. The provider bills you for the tokens, and OpenRouter charges nothing on the first $25,000 of list-price inference each month. Above that amount, OpenRouter charges 5% of what the same requests would cost through OpenRouter.
The fee adds 5.5% to a bill. The choice of host changes that bill far more.
The same model, different hosts
The same model's price and speed varied widely from host to host, and a higher price did not reliably mean a faster host. On OpenRouter, several companies often serve the same open model, and OpenRouter calls those companies providers. In November 2026, DeepSeek V4.1 Flash had 45 endpoints from 36 providers. Standard-priority input prices ran from $0.035 to $0.45 per million tokens, a factor of 13. A low-priority "flex" endpoint charged as little as $0.025.
A shared model name does not mean every host runs the same copy of it. Each endpoint lists a number format. Wafer uses mxfp4, a 4-bit format, Morph uses fp8, and Together does not say. In our live test, Wafer and Morph translated as well as each other within our margin of error.
We timed several models on hosts with requests from our product: an unfinished sentence from a sermon, translated into one or three languages.
| Model and host | Price per 1M tokens, in / out | Languages | Measured | Median time per call |
|---|---|---|---|---|
| $0.75 / | 1 | Day 1 | 0.31 s | |
| $0.14 / | 1 | Day 1 | 0.86 s | |
| $0.35 / | 3 | Day 1 | 0.52 s | |
| $0.15 / | 3 | Day 1 | 0.87 s | |
| $0.15 / | 3 | Day 1 | 1.27 s | |
| gpt-oss-120b on the cheapest hosts | $0.03 to $0.04 input | 3 | Day 1 | 2 to 6 s |
| not recorded | 3 | Day 1 | 44 s | |
| $0.038 / | 3 | Day 2 | 0.63 s | |
| $0.30 / | 3 | Day 2 | 0.56 to 0.63 s | |
| $0.05 / | 3 | Day 2 | 1.26 s, then 4.93 s |
We made 5 to 8 calls per host through OpenRouter on two days in a row in November 2026 and timed each call to the complete answer, including routing and network time.
Gemma 4 31B ran almost three times faster on ModelRun than on Friendli, but ModelRun charged five times more for input. On a third host, Gemma took over 6 seconds for three languages.
gpt-oss-120b took 2 to 6 seconds a call on its cheapest hosts: CoreWeave, Near AI, DeepInfra and Venice. On Cerebras it took 0.52 seconds. Google Vertex took 44 seconds, which is 85 times as long as Cerebras.
Here are the same hosts on one time scale, with each host's price beside it.
Median time per call to the complete answer, through OpenRouter, measured over two days in November 2026. Prices are OpenRouter list prices per million input / output tokens.
For DeepSeek V4.1 Flash, Wafer matched Together, the fastest host, at about an eighth of Together's input price. DeepSeek API pricing across hosts lists all hosts for that model and checks quality on the cheap and 4-bit hosts.
A host's speed changes during the day
A host's speed changed from one day to the next, and even within 20 minutes. On the first day, our three-language test took 0.96 seconds on Wafer and 1.78 seconds on Morph. The next day, a much smaller request took 3.3 to 3.6 seconds on Wafer and 0.9 to 2.5 seconds on Morph. Morph was faster that time.
That evening, Wafer took 0.63 seconds in two runs 20 minutes apart. Morph took 1.26 seconds in the first run and 4.93 seconds in the second.
DeepSeek V4.1 Flash through OpenRouter, measured over two days in November 2026.
In our first production test in November 2026, we sent whole long lines of speech to translate. A long line in five languages took 9 to 13 seconds on our three routes, and our limit was 4 seconds per route. Of 11 caption calls, 6 failed and the other 5 needed a backup model.
We made two changes: we translated one sentence at a time, and we raised the limit to 8 seconds. In the next test, Wafer served all 67 calls with no fallback. See how the caption loop works.
Pin the host, and keep your own fallback
We pin our first attempt to one endpoint and keep the fallback list in our own code. By default, OpenRouter picks a provider for you and falls back to others when one fails. Fallback helps reliability, but your speed and price depend on a choice OpenRouter makes on each request. OpenRouter's provider routing settings let you choose the provider. Our first attempt sends these settings:
| Setting | What it does |
|---|---|
| provider.order: ["wafer/ | sends the request to that endpoint only |
| provider.allow_fallbacks: false | no silent switch to another host |
| provider.zdr: true | zero data retention routing, following the account's choice |
| reasoning.enabled: false | no thinking tokens before the answer |
| usage.include: true | the response reports tokens and cost |
The first of three routes in Verli's room captions, as of November 2026.
If Wafer does not answer within 8 seconds, our code sends the same request to Morph, pinned to morph/fp8. If Morph is too slow, the request goes to Gemma 4 31B, pinned to DeepInfra or Parasail. We set that order from our measurements. We can switch models as well as hosts.
Animated diagram of our fallback order. A caption request goes first to DeepSeek V4.1 Flash on Wafer. If Wafer does not answer within 8 seconds, our code sends the same request to DeepSeek V4.1 Flash on Morph. If Morph is too slow, the request goes to Gemma 4 31B on DeepInfra or Parasail.
Wafer and Morph answer times are medians measured through OpenRouter in November 2026. We did not time the Gemma route here. The animation runs faster than real time.
We ask for zero data retention because Verli sends speech from churches and classrooms. In November 2026, OpenRouter's zero data retention list had 1,097 endpoints, and the zdr setting tells OpenRouter to route requests to those endpoints. The list is OpenRouter's, and we have not audited any host's practices. OpenRouter's pricing page says zero data retention routing is available on every plan, while broader routing by data policy starts at Standard.
Your account choice controls the zdr setting. OpenRouter's zero data retention page says self-serve accounts that have not chosen also allow endpoints under "Safety Retention". Under Safety Retention, a provider may keep prompts to detect abuse. If you choose "ZDR only" in the account settings, OpenRouter excludes those endpoints. Even then, content flagged as possible child abuse material may be kept for review and legal preservation.
When to go direct
The 5.5% fee is worth avoiding when your spend is large and goes to one host. Going direct to that host avoids the fee on credits at the same published token prices. If you bring your own key, you avoid the fee too, up to $25,000 of inference a month, and you keep OpenRouter's single API and routing. We did not compare the contracts, discounts or features that hosts offer through their own APIs, which may differ.
For our rooms, the fee is too small to make us leave OpenRouter.
What renting a GPU would have to beat
For a workload like ours, per-token prices cost less than a rented GPU until many rooms run at the same time, all day. Renting GPUs avoids per-token prices because you run the model yourself. We have not done this, so this section compares rental prices with how a caption workload uses a rented GPU.
| GPU, on demand | Price per hour |
|---|---|
| $2.89 | |
| $3.99 | |
| $4.29 | |
| $5.29 | |
| $50.44 |
Prices come from RunPod's pricing page, Lambda's pricing page and CoreWeave's pricing page. We read them in November 2026.
Gemma 4 31B fits on one GPU. vLLM's recipe for Gemma 4 31B describes serving it at its released 16-bit precision on a single 80GB card. One H100 at $2.89 an hour costs about $2,100 for a 730-hour month, whether anyone is speaking or not.
DeepSeek V4.1 Flash is far larger. vLLM's recipe for DeepSeek V4.1 Flash lists the model at about 511 GB on disk and sets the total at 614 GB with headroom. Its examples include an 8-GPU H200 node holding the whole model, and four H200s with part of the model kept in the host computer's memory. The measurements in the recipe are from an earlier release of the model, not the October 2026 release.
CoreWeave's 8-GPU H200 node costs $50.44 an hour, about $36,800 for a 730-hour month. Four H200s at RunPod's single-GPU price would total $21.16 an hour. We did not confirm that RunPod rents a four-GPU machine at that rate.
A per-token API bills only for the calls you send, but a rented GPU bills every hour, busy or idle. Caption translation comes in bursts because a room sends calls only while someone is speaking. Many rooms meet for a few hours a week, as a church service might. A GPU rented all week for one two-hour service would be idle about 99% of the time. If you rent only for the service hours, you wait each time for a server to start and load the model, and DeepSeek V4.1 Flash is hundreds of gigabytes.
Pick a GPU and the hours a room is busy each week to see how much of the rent pays for idle time.
$2.89 an hour. Gemma 4 31B fits on one GPU.
Idle share of the rented hours
99%
Rent for a 730-hour month
about$2,100
Rent for each busy hour
$243
On-demand list prices read in November 2026. Rent only, with no other cost of running servers. A month is 730 hours and a week is 168. Where the busy hours fall on the grid is only for illustration.
These figures compare rental prices only. They do not include any other cost of running your own servers. A busy room's calls should be about as fast as the calls to the hosts above. Before you rent, measure whether one GPU can match that speed for all your rooms at once.