Does your AI agent's server region matter? We timed it
Model calls through OpenRouter timed from servers in Germany, Finland, the US and Singapore at once: what each place added to Claude, GPT and Gemini calls.
Through OpenRouter, yes, by a few tenths of a second on a short model call. On October 23, 2026 we timed 1,500 short calls through OpenRouter to Claude Haiku 5.5, GPT-6 Luna and Gemini 3.1 Flash Lite, from five servers at the same time. For all three models the answer started soonest on the two US servers and latest in Singapore, 0.42 to 0.52 seconds apart at the median, with the servers in Germany and Finland 0.14 to 0.30 seconds behind the faster US one. With an agent’s worth of context in each call, only Gemini kept that order. Every server reached OpenRouter’s and the labs’ API addresses in 1 to 14 milliseconds, so the gap opens further along the way. On GPT-6 Luna the model’s own variation was larger than the place’s: a fifth to two fifths of its calls took over two seconds, wherever they came from.
How it was measured
Five small cloud servers, with one or two vCPUs each on Ubuntu 24.04, ran the same Python script at the same time, between 11:48 and 12:14 UTC: one each in Germany, Finland, the US east coast, the US west coast and Singapore. Every call went to OpenRouter’s chat completions API at its list prices, pinned to the model’s own lab (Anthropic, OpenAI or Google AI Studio) with OpenRouter’s fallback to other providers turned off, and every response named the lab that served it.
From each server, each model got 100 short calls two seconds apart, the three models taking turns. Each call was a one-line request answered in a word (two to six tokens), with reasoning off, streamed over one HTTPS connection kept open between calls. Time to first token is measured from sending the request to the first word of the answer; the whole answer arrived 14 to 39 milliseconds after it, so the table gives the first token. Each model then got ten calls carrying an agent’s worth of context, and each server timed 100 new connections to OpenRouter and to each lab’s own API address. The 1,650 model calls cost $0.19.
How long a short call took from each place
Median time to first token in milliseconds, with the 10th to 90th percentile in brackets under it, over 99 or 100 calls each:
| Server | Claude Haiku 5.5 | GPT-6 Luna | Gemini 3.1 Flash Lite |
|---|---|---|---|
US east coast | 682 (555 to 1,234) | 1,188 (685 to 3,940) | 543 (466 to 712) |
US west coast | 762 (571 to 1,239) | 1,049 (756 to 3,319) | 469 (376 to 586) |
Germany | 913 (736 to 1,303) | 1,260 (888 to 5,211) | 605 (536 to 743) |
Finland | 888 (750 to 1,288) | 1,353 (920 to 2,950) | 661 (581 to 805) |
Singapore | 1,104 (949 to 1,638) | 1,567 (1,144 to 6,462) | 913 (835 to 1,095) |
Slowest place less fastest | 422 | 518 | 444 |
The order held for every model: the two US servers first, Singapore last, Germany and Finland between. From Europe a call took 136 to 304 milliseconds longer than from the faster US server.
GPT-6 Luna varied far more from call to call than the other two. Between 21 and 40 of its 100 calls in each place took more than two seconds to start answering, and its slowest call in each place took 8 to 17 seconds. Claude Haiku 5.5 had at most five calls over two seconds in a place, and Gemini 3.1 Flash Lite at most one, though one Gemini call from Singapore took 50 seconds. None of the 1,500 calls failed.
The first hop is short from everywhere
Median TCP connect time in milliseconds, which is one network round trip, over 100 new connections from each server:
| Server | openrouter.ai | api.anthropic.com | api.openai.com | generativelanguage.googleapis.com |
|---|---|---|---|---|
US east coast | 1 | 1 | 1 | 1 |
US west coast | 1 | 1 | 1 | 4 |
Germany | 14 | 14 | 14 | 4 |
Finland | 2 | 2 | 2 | 3 |
Singapore | 1 | 1 | 1 | 2 |
Each name led to the same addresses from all five places, and a round trip of one or two milliseconds cannot cross an ocean, so each address is answered by a network edge close to whoever calls it. The TLS handshake on top took 5 to 20 milliseconds, which is what a new connection adds to a call; a connection kept open pays it once. OpenRouter also answered a small request that runs no model, a read of the key’s own details, in a median of 9 to 26 milliseconds from every place.
So the hundreds of milliseconds between places arise beyond that first hop, on the way from the edge to wherever the model is served. An order with the US first fits the three models being served from the US, but a test from outside cannot see where any lab runs them.
With an agent’s worth of context
An agent’s call carries far more than one line: its instructions, its tools and the conversation so far. Each model also got ten calls with 36,000 to 53,000 tokens of context (the same text, counted by each model’s tokenizer), a text of each server’s own, so the first call missed every cache and the other nine read it from cache. The German server started these about a minute and a half before the other four, which ran together.
Gemini 3.1 Flash Lite kept the short calls’ order, from a median of 0.62 seconds on the US west coast to 1.24 seconds in Singapore. Over nine cached calls, Claude Haiku 5.5 and GPT-6 Luna did not sort by place. Haiku’s medians ran from 1.54 to 2.03 seconds. For three minutes, Luna’s calls from Finland took 6 to 14 seconds, while the same calls from the US and Singapore took 0.9 to 4.5. The first, uncached call took 1.6 to 4.2 seconds, apart from Luna’s from Finland at 9.2. One of the 150 calls failed: Google answered a Gemini call from Singapore that the model was “currently experiencing high demand”, and with fallbacks off nothing retried it elsewhere.
What it adds up to for an agent
An agent does a job as a chain of model calls, each waiting on the one before. As arithmetic from the short-call medians, not a measured job: twenty calls on Gemini 3.1 Flash Lite, the one model whose agent-sized calls kept the same order, would spend about 2.7 seconds longer waiting from Germany than from the US west coast, and about 8.9 seconds longer from Singapore, on top of the time the model spends writing. Claude Haiku 5.5’s and GPT-6 Luna’s agent-sized calls did not show the gap, so the same sum for them rests on short calls alone. Set against a job that runs for minutes, that is a small share; on a reply someone is waiting for, it is part of the wait.
Where an agent’s server is placed is usually decided by other things: price and the law it runs under (what an OpenClaw server needs), or the websites it can reach from there (which sites block a cloud server). On this route, a short call took up to half a second longer from the farthest place.
What the test does not show
- The labs’ own APIs called directly. Only connections to their addresses were timed; every model call went through OpenRouter.
- Other hours and days. The calls ran over 26 minutes on one Friday, around midday UTC.
- Larger models. One small, low-priced model from each lab was tested. A larger model takes longer to answer, and the test does not show whether the place’s share changes with it.
- Bursts. Short calls were two seconds apart and agent-sized calls three, where an agent working fast may send the next call at once.