Research

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

Research · 10 min read
A long line waits at a serving hatch while one person pushes a loaded cart down a winding path and a cyclist speeds off with a parcel.

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.

PlanFeeWhat it adds
Freenone25+ free models, 50 requests a day
Standard, pay as you go5.5% on credit purchases600+ models, routing by data policy, prompt caching
Business, pay as you go8% on credit purchasesEU and US in-region routing, 1,000 workspaces
Enterprisediscounts by contractinvoicing, SLAs, single sign-on
Bring your own keynone 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 hostPrice per 1M tokens, in / outLanguagesMeasuredMedian time per call
Gemma 4 31B on ModelRun$0.75 / $1.001Day 10.31 s
Gemma 4 31B on Friendli$0.14 / $0.401Day 10.86 s
gpt-oss-120b on Cerebras$0.35 / $0.753Day 10.52 s
gpt-oss-120b on Groq$0.15 / $0.603Day 10.87 s
gpt-oss-120b on Nebius$0.15 / $0.603Day 11.27 s
gpt-oss-120b on the cheapest hosts$0.03 to $0.04 input3Day 12 to 6 s
gpt-oss-120b on Google Vertexnot recorded3Day 144 s
DeepSeek V4.1 Flash on Wafer$0.038 / $0.503Day 20.63 s
DeepSeek V4.1 Flash on Together$0.30 / $1.203Day 20.56 to 0.63 s
DeepSeek V4.1 Flash on Morph$0.05 / $0.453Day 21.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.

Seconds per call, by host
0.3 s1 s3 s10 s30 sGemma 4 31B, one languageModelRun $0.75 / $1.000.31 sFriendli $0.14 / $0.400.86 sgpt-oss-120b, three languagesCerebras $0.35 / $0.750.52 sGroq $0.15 / $0.600.87 sNebius $0.15 / $0.601.27 sFour cheapest hosts $0.03 to $0.04 in2 to 6 sGoogle Vertex price not recorded44 sDeepSeek V4.1 Flash, three languagesWafer $0.038 / $0.500.63 sTogether $0.30 / $1.200.56 to 0.63 sMorph $0.05 / $0.451.26 s, then 4.93 s

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.

Wafer and Morph, run by run
WaferMorph
0 s1 s2 s3 s4 s5 sFirst day, three languagesWafer0.96 sMorph1.78 sNext day, a much smaller requestWafer3.3 to 3.6 sMorph0.9 to 2.5 sThat evening, three languagesWafer0.63 sMorph1.26 s20 minutes laterWafer0.63 sMorph4.93 s

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:

SettingWhat it does
provider.order: ["wafer/us"]sends the request to that endpoint only
provider.allow_fallbacks: falseno silent switch to another host
provider.zdr: truezero data retention routing, following the account's choice
reasoning.enabled: falseno thinking tokens before the answer
usage.include: truethe 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.

Our fallback order for one caption request

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 demandPrice per hour
One H100 80GB PCIe, RunPod$2.89
One H100 80GB SXM, RunPod$3.99
One H100 80GB SXM, Lambda$4.29
One H200, RunPod$5.29
Eight H200 in one node, CoreWeave$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.

How much of a rented GPU sits idle

$2.89 an hour. Gemma 4 31B fits on one GPU.

1168, every hour

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.

See live transcription and translation in action

Verli transcribes and translates any audio your computer plays, live. Free for 60 minutes upon sign-up.

Frequently asked questions

How much does OpenRouter charge?

OpenRouter charges a 5.5% fee on Standard credit purchases, or 8% on Business. Model prices are the provider's own list prices, with no markup. If you use your own provider key, OpenRouter charges no fee on the first $25,000 of inference a month, then charges 5%. We read these prices in November 2026.

Is OpenRouter more expensive than going direct?

Yes, by the 5.5% credit fee on Standard, at the same published token prices. We did not compare direct contracts or discounts. Choosing a different host for the same model can change the price far more. DeepSeek V4.1 Flash input ran from $0.035 to $0.45 per million tokens on standard endpoints.

Can I choose which provider OpenRouter uses?

Yes, you can. Set provider.order to a list of endpoints and provider.allow_fallbacks to false, and the request goes only to those endpoints. If you add zdr: true, you ask for zero data retention routing, which follows the choice in your account settings. Pick "ZDR only" in the account settings to exclude providers that keep prompts for abuse checks.

Does OpenRouter charge for failed requests?

No, not for the model tokens of an attempt that fails with an error. With OpenRouter's fallback, you pay for the provider that answered. OpenRouter can still bill you for services that already ran for a failed attempt, such as web search.

More from Verli