Speed Test
ChatGPT API thumbnail

How fast is the ChatGPT API? Real GPT-5.6 time to first token from 5 regions

We ran real, authenticated streaming completions against OpenAI's flagship gpt-5.6-sol — with reasoning effort set to "low" — from Amsterdam, San Francisco, Montreal, Singapore and Tokyo, 20 per city, parsing the token stream itself and timestamping the moment the first visible token arrived.

Independent measurement by LatencyRadar. Not affiliated with OpenAI. · Last updated August 2026.

Quick take

Every single completion succeeded, and the first token typically arrived in 0.8–1.1 seconds: Tokyo was fastest at 824 ms, Singapore slowest at 1096 ms — only a 1.3× spread. That's because gpt-5.6-sol thinks before it speaks: OpenAI holds the response until the first token is ready — our stream timestamps show the headers and the first visible token arriving within 23–54 ms of each other — and subtracting each city's measured network floor leaves a fairly constant 0.66–0.86 seconds of OpenAI-side time everywhere, which dwarfs the network. The number to plan for is the slow case: the slowest first tokens we observed took 2.0 to 3.4 seconds, and they didn't follow geography.

  • 100 out of 100 streaming completions succeeded (gpt-5.6-sol, reasoning effort "low")
  • Typical time to first token: 824 ms (Tokyo) to 1096 ms (Singapore) — only a 1.3× spread
  • Stream open and first token are near-simultaneous (23–54 ms apart): OpenAI buffers the response until the model has something to say
  • The slow cases are the real story: the slowest first tokens we observed took 2.0–3.4 s, and they didn't follow geography

Where in the world is it fast?

Tokyo came out fastest at 824 ms, followed by Montreal (832 ms), San Francisco (865 ms), Amsterdam (878 ms) and Singapore (1096 ms). Compare that to our unauthenticated probe of the same API, where regions spread 3.4× apart (70–235 ms): once the model's roughly constant thinking time is added on top, the spread compresses to 1.3×. Your region still sets a floor — Singapore pays real physics on every call — but for a flagship reasoning model it's far from the dominant term.

Amsterdam 3207msSan Francisco 2886msMontreal 1256msSingapore 2336msTokyo 1160msSlowest region: Amsterdam
Amsterdam
p50: 878 ms
p95: 3207 ms
Error rate: 0.0%
Legend
Fast - < 200ms
Moderate - 200-500ms
Slow - > 500ms
Error / request failed
No latency measurement

Marker size and color reflect p95 latency by region.

Where is the time actually going?

These timings come from parsing the token stream itself, not from transport phases alone. For OpenAI the stream only opens when the first token is ready: headers and first visible token arrived within 23–54 ms of each other in every city, so nearly all of the 0.8–1.1 second wait is queueing plus the model's low-effort reasoning before the stream opens. Subtract the pure network floor we measured separately (70–235 ms by city) and the model-side share comes out at a fairly constant 0.66–0.86 s per region. Connection setup and TLS stay under ~25 ms everywhere — Cloudflare's edge.

ConnectTLSServer waitDownload
Amsterdam
891 ms
San Francisco
874 ms
Montreal
840 ms
Singapore
1109 ms
Tokyo
833 ms

DNS resolution is measured once per region before the requests run, so it sits outside these bars: Amsterdam 3 ms · San Francisco 52 ms · Montreal 15 ms · Singapore 4 ms · Tokyo 3 ms

Phases come from the typical (median) request, so they add up to its total.

How is it delivered?

Both IPs our probes reached belong to Cloudflare and TLS terminates locally. For streaming APIs our delivery verdict is computed from stream-open times rather than the inference-dominated totals — though note that for OpenAI, stream-open itself includes the model's thinking, since the response is held until the first token; read the 292 ms spread as an upper bound on the network's share. What's clearer is that the slowest requests didn't follow geography: Amsterdam's and San Francisco's slowest first tokens (~3.2 s) were worse than Tokyo's and Montreal's, despite shorter routes — which suggests the variance sits beyond the network path, though a single run can't pin down where.

Geo-distributed, unevenly served2 distinct server IPs292 ms spread between regions

Regions resolved to 2 different IP addresses but latency varies by 292ms, so some regions appear to be served from a distant location.

Region metrics

Start with the headline number for each city. Open the technical breakdown only if you want to see where that time is coming from.

Reference region

Amsterdam

20 requests · 100% successful

First token, typical
878 ms
On a slower request
3207 ms
Consistency
Can spike
Slowest observed: 3221 ms
Biggest delay: Server responseReliability: 100%
Technical breakdown (typical request)
DNS resolve
3 ms
Connect
9 ms
TLS
14 ms
Server wait
828 ms
Download
40 ms
Stream open
851 ms
First token
878 ms
Full answer
891 ms
Region result

San Francisco

20 requests · 100% successful

First token, typical
865 ms
On a slower request
2886 ms
Consistency
Can spike
Slowest observed: 3246 ms
Biggest delay: Server responseReliability: 100%
Technical breakdown (typical request)
DNS resolve
52 ms
Connect
4 ms
TLS
8 ms
Server wait
816 ms
Download
46 ms
Stream open
828 ms
First token
865 ms
Full answer
874 ms
Region result

Montreal

20 requests · 100% successful

First token, typical
832 ms
On a slower request
1256 ms
Consistency
Some slower moments
Slowest observed: 1956 ms
Biggest delay: Server responseReliability: 100%
Technical breakdown (typical request)
DNS resolve
15 ms
Connect
2 ms
TLS
7 ms
Server wait
694 ms
Download
137 ms
Stream open
778 ms
First token
832 ms
Full answer
840 ms
Slowest region

Singapore

20 requests · 100% successful

First token, typical
1096 ms
On a slower request
2336 ms
Consistency
Can spike
Slowest observed: 3360 ms
Biggest delay: Server responseReliability: 100%
Technical breakdown (typical request)
DNS resolve
4 ms
Connect
3 ms
TLS
10 ms
Server wait
1064 ms
Download
32 ms
Stream open
1070 ms
First token
1096 ms
Full answer
1109 ms
Fastest region

Tokyo

20 requests · 100% successful

First token, typical
824 ms
On a slower request
1160 ms
Consistency
Mostly steady
Slowest observed: 2479 ms
Biggest delay: Server responseReliability: 100%
Technical breakdown (typical request)
DNS resolve
3 ms
Connect
2 ms
TLS
7 ms
Server wait
792 ms
Download
32 ms
Stream open
801 ms
First token
824 ms
Full answer
833 ms

What stands out

  • GPT-5.6 thinks before it speaks — and now we can see it: OpenAI's stream opens within tens of milliseconds of the first real token, while xAI's Grok (measured the same way) opens its stream in ~0.2 s and reasons inside it. Same SSE format, opposite buffering strategies.
  • Model time is roughly constant: subtracting each region's measured network floor leaves 0.66–0.86 s of OpenAI-side time everywhere — switching regions won't make gpt-5.6-sol feel much faster.
  • Regions sit only 1.3× apart on first-token time versus 3.4× apart on raw network latency to the same API — model time flattens geography.
  • The slowest requests don't follow geography: Amsterdam and San Francisco saw ~3.2 s first tokens while Montreal never exceeded 2.0 s — and all 100 completions returned HTTP 200.

Why 'on a bad day' matters for AI apps

In a chat UI, perceived speed is the time until the first word appears. The typical numbers here are workable — around a second everywhere — but the slowest completions we observed took 2.0 to 3.4 seconds to produce a single token, and slow cases showed up in every city we tested. A closer region doesn't appear to fix it, because the slow cases didn't follow geography. What you can do is design for it: stream tokens as they arrive, show the request was accepted immediately, and treat a multi-second first token as normal rather than as a timeout.

How we ran this test

We ran real, authenticated streaming completions — POST /v1/chat/completions with stream: true — against OpenAI's gpt-5.6-sol from servers in Amsterdam, San Francisco, Montreal, Singapore and Tokyo, 20 per city, all with the same fixed prompt. We parsed the SSE token stream and timestamped each event as it decoded: when the stream opened, when the first visible token arrived (the headline number on this page), and when the response completed — alongside the usual DNS, connect and TLS phases. OpenAI holds the response headers until the first visible token, and the timestamps confirm it: the two events landed within 23–54 ms of each other in every city. We also probed the same hostname unauthenticated to measure the pure network floor the copy cites.

Model: gpt-5.6-sol, reasoning effort "low", max_completion_tokens 256, default temperature
Prompt: "Say 'ok' and nothing else." — identical across every city and every LLM API we benchmark
Request: authenticated streaming POST /v1/chat/completions (worker-held API key)
Cities tested: 5 · 20 requests per city · 100 total
Timings from parsing the token stream, measured from request send; percentiles computed per city

How fast is your API compared to OpenAI's?

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

Test my API

Takes about 30 seconds.

More public benchmarks →