Provider Matrix

Same model, different provider: which OpenRouter route is fastest?

OpenRouter lets you run identical weights on different companies' infrastructure with a one-line routing change. We pinned two open-weights models to seven providers each — fallbacks off, served provider verified on every sample — and measured time to first token from five cities. The result is the question every OpenRouter user actually has, answered per region: I've picked my model, so which provider should serve it?

Independent measurement by LatencyRadar. Not affiliated with OpenRouter or any provider · Measured on August 22, 2026.

Quick take

Provider choice moved time-to-first-token by 2–3× for the same model and the same prompt — and the right answer depends on where your users are. For DeepSeek V4 Flash, Fireworks was fastest from all five cities this run. For GLM 5.2 only two providers answered our full burst, so its table is a two-provider comparison: DigitalOcean was faster from Europe and North America, Novita from Singapore and Tokyo.

  • DeepSeek V4 Flash: Fireworks fastest in every region this run (486–751 ms typical first token), by margins from 16 ms (Amsterdam, Montreal) to ~190 ms (Tokyo).
  • But the fastest route had the roughest tail: Fireworks' slowest observed responses reached 6.7–8.6 s in four of five regions, while Novita — roughly 2× slower typically — never exceeded ~3.1 s. Single observations at n=20: a hypothesis we'll test on repeat runs, not a conclusion.
  • GLM 5.2: of the two providers that answered our full 20-request burst, DigitalOcean was faster from Amsterdam, San Francisco and Montreal (592–711 ms), Novita from Singapore and Tokyo (1032/1016 ms). The other five providers' numbers were too thin to rank.
  • Same model, same prompt, slowest ranked provider ran ~2–3× the fastest (486 ms vs 1444 ms from San Francisco on DeepSeek).
  • In many GLM cells most of our requests went unanswered. That may be our own account's rate limits rather than anything about those providers — we're testing that before drawing conclusions, and those cells stay visible but unranked.

DeepSeek V4 Flash

Model deepseek/deepseek-v4-flash-0731 — identical request to every provider, time to first visible token (p50 of each region's samples).

ProviderAmsterdamSan FranciscoMontrealSingaporeTokyo
Fireworks
pinned: fireworks
658 msslowest observed 7166 ms · n=20
486 msslowest observed 6681 ms · n=20
616 msslowest observed 1825 ms · n=20
703 msslowest observed 6746 ms · n=20
751 msslowest observed 8600 ms · n=20
BaseTen
pinned: baseten/fp8
432 msonly 2 of 20 answered — unranked
577 msslowest observed 789 ms · n=5
457 msonly 2 of 20 answered — unranked
810 msslowest observed 1037 ms · n=5
799 msonly 3 of 20 answered — unranked
Together
pinned: together
809 msslowest observed 1125 ms · n=18
724 msslowest observed 986 ms · n=17
688 msslowest observed 899 ms · n=18
1132 msslowest observed 1677 ms · n=17
945 msslowest observed 1923 ms · n=19
DigitalOcean
pinned: digitalocean
785 msslowest observed 1083 ms · n=20
886 msslowest observed 1231 ms · n=20
632 msslowest observed 2076 ms · n=20
1199 msslowest observed 1907 ms · n=20
1279 msslowest observed 1912 ms · n=20
Cloudflare
pinned: cloudflare
674 msslowest observed 3973 ms · n=18
1016 msslowest observed 3666 ms · n=18
867 msslowest observed 4021 ms · n=18
1085 msslowest observed 3865 ms · n=18
1085 msslowest observed 3958 ms · n=18
Novita
pinned: novita/fp8
1343 msslowest observed 1609 ms · n=20
1444 msslowest observed 3139 ms · n=20
1450 msslowest observed 2333 ms · n=20
1603 msslowest observed 1821 ms · n=20
1590 msslowest observed 1956 ms · n=20
SiliconFlow
pinned: siliconflow/fp8
1094 msslowest observed 1700 ms · n=20
1269 msslowest observed 1827 ms · n=20
1512 msslowest observed 2344 ms · n=20
1722 msslowest observed 4017 ms · n=20
1467 msslowest observed 2374 ms · n=20

Quantization per endpoint — Fireworks, Together, DigitalOcean, Cloudflare: not listed by OpenRouter · BaseTen, Novita, SiliconFlow: fp8.

Amsterdam: Fireworks 658 ms (fastest of 6 ranked, +16 ms to next)San Francisco: Fireworks 486 ms (fastest of 7 ranked, +91 ms to next)Montreal: Fireworks 616 ms (fastest of 6 ranked, +16 ms to next)Singapore: Fireworks 703 ms (fastest of 7 ranked, +107 ms to next)Tokyo: Fireworks 751 ms (fastest of 6 ranked, +194 ms to next)

"Fastest this run" is a single-snapshot observation, not a standing recommendation — see the methodology for the rule we hold ourselves to before recommending a route.

GLM 5.2

Model z-ai/glm-5.2 — identical request to every provider, time to first visible token (p50 of each region's samples).

ProviderAmsterdamSan FranciscoMontrealSingaporeTokyo
DigitalOcean
pinned: digitalocean
711 msslowest observed 819 ms · n=20
670 msslowest observed 1208 ms · n=20
592 msslowest observed 703 ms · n=20
1087 msslowest observed 1801 ms · n=20
1196 msslowest observed 2072 ms · n=20
Novita
pinned: novita/fp8
872 msslowest observed 973 ms · n=20
857 msslowest observed 1072 ms · n=20
853 msslowest observed 949 ms · n=20
1032 msslowest observed 1523 ms · n=20
1016 msslowest observed 1135 ms · n=20
Fireworks
pinned: fireworks
545 msonly 1 of 20 answered — unranked
3024 msonly 1 of 20 answered — unranked
3215 msonly 1 of 20 answered — unranked
2964 msonly 1 of 20 answered — unranked
708 msonly 1 of 20 answered — unranked
Together
pinned: together
819 msonly 2 of 20 answered — unranked
512 msonly 2 of 20 answered — unranked
386 msonly 4 of 20 answered — unranked
988 msonly 1 of 20 answered — unranked
672 msonly 1 of 20 answered — unranked
BaseTen
pinned: baseten/fp8
525 msonly 1 of 20 answered — unranked
1794 msonly 1 of 20 answered — unranked
468 msonly 1 of 20 answered — unranked
751 msonly 1 of 20 answered — unranked
2023 msonly 1 of 20 answered — unranked
Cloudflare
pinned: cloudflare
1058 msonly 1 of 20 answered — unranked
1404 msonly 1 of 20 answered — unranked
2838 msonly 1 of 20 answered — unranked
1911 msonly 2 of 20 answered — unranked
2847 msonly 1 of 20 answered — unranked
SiliconFlow
pinned: siliconflow/fp8
983 msonly 1 of 20 answered — unranked
1163 msonly 1 of 20 answered — unranked
1087 msonly 1 of 20 answered — unranked
1541 msonly 1 of 20 answered — unranked
1266 msonly 1 of 20 answered — unranked

Quantization per endpoint — DigitalOcean, Fireworks, Together, Cloudflare: not listed by OpenRouter · Novita, BaseTen, SiliconFlow: fp8.

Amsterdam: DigitalOcean 711 ms (fastest of 2 ranked, +161 ms to next)San Francisco: DigitalOcean 670 ms (fastest of 2 ranked, +187 ms to next)Montreal: DigitalOcean 592 ms (fastest of 2 ranked, +261 ms to next)Singapore: Novita 1032 ms (fastest of 2 ranked, +55 ms to next)Tokyo: Novita 1016 ms (fastest of 2 ranked, +180 ms to next)

"Fastest this run" is a single-snapshot observation, not a standing recommendation — see the methodology for the rule we hold ourselves to before recommending a route.

How to read the non-numeric cells

Every provider × region cell is a claim, so a cell only shows a ranked number when the region completed, tokens actually streamed, and OpenRouter's in-stream provider report matched the provider we pinned on every counted sample. Everything else is labeled for what it is:

  • UnavailableThe pinned provider errored or streamed no tokens from this region during the run. With fallbacks disabled that is a real availability result, at least as decision-relevant as the milliseconds.
  • UnverifiedThe response was not confirmed to come from the pinned provider, so its numbers are withheld.
  • No run savedNo measurement was saved for this provider.
  • Grayed numbers — verified measurements from a region where most of our requests went unanswered. That may reflect rate limits on our own account rather than the provider's infrastructure, so the value is shown but never ranks and never decides "fastest".

How we ran this test

Every measurement is the same streaming POST to OpenRouter's chat completions endpoint, pinned to one provider with fallbacks disabled (provider.order + allow_fallbacks: false), so a silent failover can never publish one company's number under another's name. The body is identical across all providers and regions: prompt "Say 'ok' and nothing else.", max_tokens 256, temperature 0, reasoning disabled. Each region ran 20 measured requests (concurrency 2) after one discarded warm-up request per provider, and we parsed the token stream itself — the headline number is the time to the first visible token. OpenRouter reports which upstream actually served each response inside the stream; any sample not confirmably served by the pinned provider is excluded, and a region where that check fails is withheld entirely.

Request: streaming POST via openrouter.ai/api/v1/chat/completions
Cities: Amsterdam, San Francisco, Montreal, Singapore, Tokyo
Samples: 20 per region per provider, plus a discarded warm-up
Pinning: provider.order with allow_fallbacks: false
Verification: gateway-reported served provider must match, per sample
Quantization: as listed per endpoint by OpenRouter on the run date

This page measures serving infrastructure and network path for a short completion — not model quality, not throughput on long generations, not price. Providers may serve the same weights at different quantizations; we disclose what OpenRouter's catalog lists per endpoint, including "unknown" where it says nothing. These numbers are a dated snapshot: provider load shifts by hour and by week, so we label per-region winners "fastest this run" and only call a route a standing recommendation once the same provider wins repeated runs by more than the run-to-run spread.

How fast is your API around the world?

Run a free latency test from multiple cities and find out where your users are waiting — no setup, no account required.

Test my endpoint

Takes about 30 seconds.

More public benchmarks →