<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Max Bob</title>
    <description>The latest articles on DEV Community by Max Bob (@max_bob).</description>
    <link>https://dev.to/max_bob</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3572611%2Fbe0999e7-c7cf-48e9-8abd-28d9e85bbb23.png</url>
      <title>DEV Community: Max Bob</title>
      <link>https://dev.to/max_bob</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/max_bob"/>
    <language>en</language>
    <item>
      <title>There is no fastest AI API: 100 days of probing 44 providers from 4 regions</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Sat, 07 Nov 2026 21:13:13 +0000</pubDate>
      <link>https://dev.to/max_bob/there-is-no-fastest-ai-api-100-days-of-probing-44-providers-from-4-regions-4oc9</link>
      <guid>https://dev.to/max_bob/there-is-no-fastest-ai-api-100-days-of-probing-44-providers-from-4-regions-4oc9</guid>
      <description>&lt;p&gt;Since July I've been running probes in four places (Germany, US Central, Tokyo and São Paulo) that connect to the official API host of every AI inference provider I track, every five minutes. That's 44 providers today and 4.8 million measurements in the current 90-day window. Here is what the data says as of November 7, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI API is the fastest?
&lt;/h2&gt;

&lt;p&gt;It depends on where you call it from. Fastest endpoint per region, median time to first byte over the last 24 hours:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Fastest API&lt;/th&gt;
&lt;th&gt;p50 TTFB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;Fireworks&lt;/td&gt;
&lt;td&gt;16 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;Fireworks&lt;/td&gt;
&lt;td&gt;19 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;Fireworks&lt;/td&gt;
&lt;td&gt;30 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;62 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The same endpoint can be ten times slower from another continent:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Fastest from&lt;/th&gt;
&lt;th&gt;Slowest from&lt;/th&gt;
&lt;th&gt;Spread&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fireworks&lt;/td&gt;
&lt;td&gt;16 ms, Germany&lt;/td&gt;
&lt;td&gt;254 ms, São Paulo&lt;/td&gt;
&lt;td&gt;16.1×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nebius&lt;/td&gt;
&lt;td&gt;33 ms, Germany&lt;/td&gt;
&lt;td&gt;466 ms, Tokyo&lt;/td&gt;
&lt;td&gt;14.2×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SambaNova&lt;/td&gt;
&lt;td&gt;30 ms, Tokyo&lt;/td&gt;
&lt;td&gt;371 ms, São Paulo&lt;/td&gt;
&lt;td&gt;12.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upstage&lt;/td&gt;
&lt;td&gt;58 ms, Tokyo&lt;/td&gt;
&lt;td&gt;612 ms, São Paulo&lt;/td&gt;
&lt;td&gt;10.5×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM&lt;/td&gt;
&lt;td&gt;94 ms, Tokyo&lt;/td&gt;
&lt;td&gt;542 ms, São Paulo&lt;/td&gt;
&lt;td&gt;5.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;TTFB here is the network floor: a request over an already open TLS connection until the first byte comes back. It says nothing about model speed or quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much of time to first token is just the network?
&lt;/h2&gt;

&lt;p&gt;Between 2% and 78%, depending on the model and the region. That comes from real streamed completions for the providers where I hold a key. Groq serving gpt-oss-120b has a median TTFT of 354 ms from Germany and 1,371 ms from Tokyo. Same model, same provider, the difference is distance. For a small fast model, picking a host on the right continent matters more than picking the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI providers are the most reliable?
&lt;/h2&gt;

&lt;p&gt;Over the last 24 hours, 36 of 44 providers answered every probe (50,006 probes). Widen the window and the picture changes: 26 of 44 dropped at least one probe in the last 7 days. Availability quoted without a window length doesn't compare to anything.&lt;/p&gt;

&lt;p&gt;Observed availability over the 90-day window, rounded to 0.1% (what an outside client saw, not an SLA):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Observed, 90 days&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fireworks&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cerebras&lt;/td&gt;
&lt;td&gt;99.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SambaNova&lt;/td&gt;
&lt;td&gt;99.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doubao&lt;/td&gt;
&lt;td&gt;99.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;99.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An outage counts against a provider only if it failed from two or more regions in the same minute while no other provider was failing. A failure seen from one region only is listed but never counted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does availability depend on where you call from?
&lt;/h2&gt;

&lt;p&gt;Yes. Identical requests to identical endpoints over the last 7 days:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Failure rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;0.089%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;0.119%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;0.126%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;0.174%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tokyo failed 2× more often than Germany. A monitor that probes from one location can't see that. Also worth knowing before you plan a fallback around a status page: only 11 of the 44 providers publish a status feed a program can read.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much notice do providers give before retiring a model?
&lt;/h2&gt;

&lt;p&gt;Computed from 233 records that carry both an announcement and a shutdown date on the provider's own deprecation page:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Median notice&lt;/th&gt;
&lt;th&gt;Shortest notice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;183 days&lt;/td&gt;
&lt;td&gt;3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;92 days&lt;/td&gt;
&lt;td&gt;0 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;63 days&lt;/td&gt;
&lt;td&gt;60 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;0 days&lt;/td&gt;
&lt;td&gt;0 days&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Coming up next: claude-opus-4-5 retires on Nov 24 and claude-sonnet-4-5 on Nov 30 (replacement: claude-sonnet-5-5). On Dec 11 OpenAI retires gpt-5, gpt-5-mini, gpt-5-nano and o3 (replacements: the gpt-5.6 family).&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Probes run from data centres, so absolute numbers are lower than what a home connection sees.&lt;/li&gt;
&lt;li&gt;TTFB is reachability and network distance, not throughput or output quality.&lt;/li&gt;
&lt;li&gt;TTFT is measured only where I pay for a key, so coverage is thin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full method: &lt;a href="https://llmlatency.dev/methodology" rel="noopener noreferrer"&gt;https://llmlatency.dev/methodology&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the data
&lt;/h2&gt;

&lt;p&gt;Everything is free under CC BY 4.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON: &lt;a href="https://llmlatency.dev/api/rankings.json" rel="noopener noreferrer"&gt;https://llmlatency.dev/api/rankings.json&lt;/a&gt;, &lt;a href="https://llmlatency.dev/api/incidents.json" rel="noopener noreferrer"&gt;https://llmlatency.dev/api/incidents.json&lt;/a&gt;, &lt;a href="https://llmlatency.dev/api/deprecations.json" rel="noopener noreferrer"&gt;https://llmlatency.dev/api/deprecations.json&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP endpoint for agents: &lt;a href="https://llmlatency.dev/mcp" rel="noopener noreferrer"&gt;https://llmlatency.dev/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install llmlatency&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Dataset on Hugging Face (&lt;a href="https://huggingface.co/datasets/llmlatency/llm-latency-tracker" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/llmlatency/llm-latency-tracker&lt;/a&gt;) and Zenodo (&lt;a href="https://doi.org/10.5281/zenodo.23388429" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.23388429&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built and run &lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;https://llmlatency.dev&lt;/a&gt;, self-funded, no provider pays for anything. Which providers or regions would you add, and where is the method wrong?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>devops</category>
      <category>webperf</category>
    </item>
    <item>
      <title>Fastest AI inference API in 2026: 30 days of latency data for Groq, Cerebras, SambaNova and 43 more, from 3 regions</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Tue, 27 Oct 2026 23:56:01 +0000</pubDate>
      <link>https://dev.to/max_bob/fastest-ai-inference-api-in-2026-30-days-of-latency-data-for-groq-cerebras-sambanova-and-43-386k</link>
      <guid>https://dev.to/max_bob/fastest-ai-inference-api-in-2026-30-days-of-latency-data-for-groq-cerebras-sambanova-and-43-386k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Short answer.&lt;/strong&gt; No single AI inference API is fastest everywhere. Over 30 days (27 September – 26 October 2026), Fireworks AI had the closest API front door in US Central (28 ms median) and Tokyo (19 ms), with SambaNova a close second in Tokyo (25 ms). In São Paulo, Fireworks was 252 ms away and OpenRouter led (61 ms). For time to first token, Groq (&lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;) delivered its first token in a median of &lt;strong&gt;0.8 s from São Paulo, 1.4 s from US Central and 1.5 s from Tokyo&lt;/strong&gt;. Google's &lt;code&gt;gemini-flash-lite-latest&lt;/code&gt; took 1.2–1.7 s, with a p95 of 5.6–6.1 s.&lt;/p&gt;

&lt;p&gt;The useful part is not the winner. It's how much the answer changes with &lt;strong&gt;where your client runs&lt;/strong&gt;. SambaNova's API front door is 25 ms away from Tokyo and 371 ms away from São Paulo, a 15× difference for the same API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network latency, all 46 providers.&lt;/strong&gt; Every 5 minutes from &lt;strong&gt;US Central, Tokyo and São Paulo&lt;/strong&gt;, a probe opens an HTTPS connection to each provider's official API host and times one request: from sending it to receiving the first byte of the reply (TTFB). That is one round trip to the provider's front door plus its edge processing. No API key is used, so the reply is usually a 401. That still measures the path, but it says nothing about the GPUs behind the door. &lt;strong&gt;1,190,063 successful probes&lt;/strong&gt; went into this post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to first token (TTFT), where we hold a working key.&lt;/strong&gt; The same probe nodes stream a real completion: a one-word prompt with &lt;code&gt;max_tokens: 1&lt;/code&gt;. TTFT is the time from opening a fresh HTTPS connection to the first non-empty chunk of the streamed reply. In this window that ran continuously for &lt;strong&gt;Groq&lt;/strong&gt; (&lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;) and &lt;strong&gt;Google&lt;/strong&gt; (&lt;code&gt;gemini-flash-lite-latest&lt;/code&gt;): &lt;strong&gt;12,992 requests&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not measured here:&lt;/strong&gt; TTFT for Cerebras and SambaNova. We don't have a working paid key for either in this window, so you only get their network numbers below. Throughput (tokens per second) isn't measured either. Vendor tokens-per-second claims are a different quantity and can't be compared with these figures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Germany is excluded.&lt;/strong&gt; We also probe from Germany, but while preparing this post I found that container was CPU-throttled. That pushed its timings up in steps of 100 ms: Google's API showed 99 ms median in the stored data against 29 ms when measured from the same host without the limit. It's fixed as of 27 October. German numbers come back once there are 30 clean days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every request goes straight to the provider's own API, never through a gateway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time to first token: Groq vs Gemini Flash-Lite
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requested from&lt;/th&gt;
&lt;th&gt;Provider · model&lt;/th&gt;
&lt;th&gt;TTFT p50&lt;/th&gt;
&lt;th&gt;TTFT p95&lt;/th&gt;
&lt;th&gt;Successful&lt;/th&gt;
&lt;th&gt;Network TTFB p50&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;Groq · gpt-oss-120b&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;794 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,338 ms&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;234 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;Groq · gpt-oss-120b&lt;/td&gt;
&lt;td&gt;1,379 ms&lt;/td&gt;
&lt;td&gt;1,906 ms&lt;/td&gt;
&lt;td&gt;99.9%&lt;/td&gt;
&lt;td&gt;121 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;Groq · gpt-oss-120b&lt;/td&gt;
&lt;td&gt;1,497 ms&lt;/td&gt;
&lt;td&gt;2,040 ms&lt;/td&gt;
&lt;td&gt;99.8%&lt;/td&gt;
&lt;td&gt;164 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;Google · gemini-flash-lite-latest&lt;/td&gt;
&lt;td&gt;1,204 ms&lt;/td&gt;
&lt;td&gt;5,602 ms&lt;/td&gt;
&lt;td&gt;89.7%&lt;/td&gt;
&lt;td&gt;155 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;Google · gemini-flash-lite-latest&lt;/td&gt;
&lt;td&gt;1,579 ms&lt;/td&gt;
&lt;td&gt;5,656 ms&lt;/td&gt;
&lt;td&gt;91.1%&lt;/td&gt;
&lt;td&gt;47 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;Google · gemini-flash-lite-latest&lt;/td&gt;
&lt;td&gt;1,682 ms&lt;/td&gt;
&lt;td&gt;6,103 ms&lt;/td&gt;
&lt;td&gt;91.6%&lt;/td&gt;
&lt;td&gt;64 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What this shows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The network is the small part.&lt;/strong&gt; Groq's front door is 121–234 ms away. Its first token arrives 560–1,330 ms after that. The gap is connection setup plus time spent inside the provider (queueing and prefill), and it is the larger part in all three regions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The closest region is not the fastest one.&lt;/strong&gt; Groq's front door is &lt;em&gt;farthest&lt;/em&gt; from São Paulo (234 ms), yet São Paulo got the fastest first token, about 600 ms faster than US Central. The pattern held in both halves of the month. We can see that it happens, not why. A likely reason is that requests from different regions are served by different Groq capacity, but we can't confirm that from outside. The practical point: measure from where your users are, because network distance doesn't predict TTFT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The tail is where Flash-Lite loses.&lt;/strong&gt; Gemini Flash-Lite's median is within a few hundred milliseconds of Groq's, but its p95 is three to four times higher (5.6–6.1 s). 8–10% of requests timed out or returned a 5xx. Our Gemini key is on the free tier, so part of that may be free-tier capacity rather than what a paid account sees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;These are two different models.&lt;/strong&gt; Groq serves a 120B open-weights model here and Google serves its smallest Gemini. Read this as "what these two endpoints did", not as a ranking of the providers.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Network latency to 20 inference APIs, by region (median TTFB)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;US Central&lt;/th&gt;
&lt;th&gt;Tokyo&lt;/th&gt;
&lt;th&gt;São Paulo&lt;/th&gt;
&lt;th&gt;Slowest ÷ fastest region&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fireworks AI&lt;/td&gt;
&lt;td&gt;28 ms&lt;/td&gt;
&lt;td&gt;19 ms&lt;/td&gt;
&lt;td&gt;252 ms&lt;/td&gt;
&lt;td&gt;13.2×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter ¹&lt;/td&gt;
&lt;td&gt;63 ms&lt;/td&gt;
&lt;td&gt;56 ms&lt;/td&gt;
&lt;td&gt;61 ms&lt;/td&gt;
&lt;td&gt;1.1×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google (Gemini)&lt;/td&gt;
&lt;td&gt;47 ms&lt;/td&gt;
&lt;td&gt;64 ms&lt;/td&gt;
&lt;td&gt;155 ms&lt;/td&gt;
&lt;td&gt;3.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Baseten&lt;/td&gt;
&lt;td&gt;47 ms&lt;/td&gt;
&lt;td&gt;157 ms&lt;/td&gt;
&lt;td&gt;152 ms&lt;/td&gt;
&lt;td&gt;3.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Novita&lt;/td&gt;
&lt;td&gt;83 ms&lt;/td&gt;
&lt;td&gt;153 ms&lt;/td&gt;
&lt;td&gt;247 ms&lt;/td&gt;
&lt;td&gt;3.0×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Groq&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;121 ms&lt;/td&gt;
&lt;td&gt;164 ms&lt;/td&gt;
&lt;td&gt;234 ms&lt;/td&gt;
&lt;td&gt;1.9×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SambaNova&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;167 ms&lt;/td&gt;
&lt;td&gt;25 ms&lt;/td&gt;
&lt;td&gt;371 ms&lt;/td&gt;
&lt;td&gt;14.9×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xAI&lt;/td&gt;
&lt;td&gt;111 ms&lt;/td&gt;
&lt;td&gt;171 ms&lt;/td&gt;
&lt;td&gt;229 ms&lt;/td&gt;
&lt;td&gt;2.1×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Together AI&lt;/td&gt;
&lt;td&gt;120 ms&lt;/td&gt;
&lt;td&gt;180 ms&lt;/td&gt;
&lt;td&gt;268 ms&lt;/td&gt;
&lt;td&gt;2.2×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cerebras&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;71 ms&lt;/td&gt;
&lt;td&gt;201 ms&lt;/td&gt;
&lt;td&gt;189 ms&lt;/td&gt;
&lt;td&gt;2.8×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;94 ms&lt;/td&gt;
&lt;td&gt;234 ms&lt;/td&gt;
&lt;td&gt;199 ms&lt;/td&gt;
&lt;td&gt;2.5×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;139 ms&lt;/td&gt;
&lt;td&gt;214 ms&lt;/td&gt;
&lt;td&gt;257 ms&lt;/td&gt;
&lt;td&gt;1.9×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference.net&lt;/td&gt;
&lt;td&gt;122 ms&lt;/td&gt;
&lt;td&gt;229 ms&lt;/td&gt;
&lt;td&gt;225 ms&lt;/td&gt;
&lt;td&gt;1.9×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;189 ms&lt;/td&gt;
&lt;td&gt;317 ms&lt;/td&gt;
&lt;td&gt;254 ms&lt;/td&gt;
&lt;td&gt;1.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Friendli&lt;/td&gt;
&lt;td&gt;181 ms&lt;/td&gt;
&lt;td&gt;284 ms&lt;/td&gt;
&lt;td&gt;285 ms&lt;/td&gt;
&lt;td&gt;1.6×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;315 ms&lt;/td&gt;
&lt;td&gt;181 ms&lt;/td&gt;
&lt;td&gt;437 ms&lt;/td&gt;
&lt;td&gt;2.4×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nebius&lt;/td&gt;
&lt;td&gt;178 ms&lt;/td&gt;
&lt;td&gt;477 ms&lt;/td&gt;
&lt;td&gt;366 ms&lt;/td&gt;
&lt;td&gt;2.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepInfra&lt;/td&gt;
&lt;td&gt;162 ms&lt;/td&gt;
&lt;td&gt;449 ms&lt;/td&gt;
&lt;td&gt;536 ms&lt;/td&gt;
&lt;td&gt;3.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hyperbolic&lt;/td&gt;
&lt;td&gt;149 ms&lt;/td&gt;
&lt;td&gt;477 ms&lt;/td&gt;
&lt;td&gt;837 ms&lt;/td&gt;
&lt;td&gt;5.6×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Featherless&lt;/td&gt;
&lt;td&gt;354 ms&lt;/td&gt;
&lt;td&gt;488 ms&lt;/td&gt;
&lt;td&gt;737 ms&lt;/td&gt;
&lt;td&gt;2.1×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;¹ OpenRouter is a gateway: its front door is close in every region, and then it forwards your request to an upstream provider. A low number here doesn't make the model behind it fast.&lt;/p&gt;

&lt;p&gt;Full table for all 46 providers: &lt;a href="https://llmlatency.dev/fastest-ai-api" rel="noopener noreferrer"&gt;llmlatency.dev/fastest-ai-api&lt;/a&gt; (rebuilt every 30 minutes from the last 24 hours).&lt;/p&gt;

&lt;p&gt;What stands out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cerebras&lt;/strong&gt; is close to US Central (71 ms) but 189–201 ms away from Tokyo and São Paulo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groq&lt;/strong&gt; was the most even of the three fast-inference specialists: 121–234 ms, a 1.9× spread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SambaNova&lt;/strong&gt; is the extreme case: 25 ms from Tokyo, 167 ms from US Central, 371 ms from São Paulo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fireworks AI&lt;/strong&gt; is closest in two regions (19 ms Tokyo, 28 ms US Central) and 252 ms away from São Paulo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you're choosing for latency
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure from the region where your &lt;strong&gt;servers&lt;/strong&gt; run, not from your laptop. In this data, provider order changed in every region.&lt;/li&gt;
&lt;li&gt;Reuse connections. TTFT above includes opening a fresh HTTPS connection every time, and a warm connection skips that.&lt;/li&gt;
&lt;li&gt;Look at p95 as well as p50. A provider that is 300 ms slower at the median but has a tight tail can feel faster in a product.&lt;/li&gt;
&lt;li&gt;Re-check monthly. Front doors move: providers add regions and change CDNs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live, last 24 h: &lt;a href="https://llmlatency.dev/fastest-ai-api" rel="noopener noreferrer"&gt;fastest AI API by region&lt;/a&gt; · &lt;a href="https://llmlatency.dev/time-to-first-token" rel="noopener noreferrer"&gt;lowest time to first token&lt;/a&gt; · per provider: &lt;a href="https://llmlatency.dev/provider/groq" rel="noopener noreferrer"&gt;Groq&lt;/a&gt;, &lt;a href="https://llmlatency.dev/provider/cerebras" rel="noopener noreferrer"&gt;Cerebras&lt;/a&gt;, &lt;a href="https://llmlatency.dev/provider/sambanova" rel="noopener noreferrer"&gt;SambaNova&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How probes work: &lt;a href="https://llmlatency.dev/methodology" rel="noopener noreferrer"&gt;methodology&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Daily aggregates under CC BY 4.0, with a DOI: &lt;a href="https://doi.org/10.5281/zenodo.21954788" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.21954788&lt;/a&gt; · from Python: &lt;code&gt;pip install llmlatency&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Related: &lt;a href="https://dev.to/max_bob/ai-api-uptime-comparison-last-30-days-openai-anthropic-google-and-43-more-measured-from-4-4m41"&gt;AI API uptime comparison, last 30 days&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I run llmlatency.dev, the independent tracker these numbers come from. No provider pays for placement. If you measure something different from your region, post it in the comments with the UTC time and I'll check it against the raw probes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>api</category>
    </item>
    <item>
      <title>OpenAI API deprecations 2026–2027: every shutdown date and recommended replacement (GPT-4o, GPT-4.1, GPT-5, o3, Whisper)</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Tue, 27 Oct 2026 23:54:10 +0000</pubDate>
      <link>https://dev.to/max_bob/openai-api-deprecations-2026-2027-every-shutdown-date-and-recommended-replacement-gpt-4o-2ffm</link>
      <guid>https://dev.to/max_bob/openai-api-deprecations-2026-2027-every-shutdown-date-and-recommended-replacement-gpt-4o-2ffm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Short answer.&lt;/strong&gt; GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini leave the OpenAI API on &lt;strong&gt;14 January 2027&lt;/strong&gt;. OpenAI's recommended replacement for all four is &lt;strong&gt;&lt;code&gt;gpt-6-luna&lt;/code&gt;&lt;/strong&gt;. Before that, GPT-5, GPT-5 mini, GPT-5 nano, GPT-5 pro, o3 and o3-pro shut down on &lt;strong&gt;11 December 2026&lt;/strong&gt;. After that come the legacy audio and realtime models (20 January), Whisper and the GPT-4o transcription models (26 February), and GPT-5.1 (1 April 2027).&lt;/p&gt;

&lt;p&gt;Every date and replacement below is copied from OpenAI's &lt;a href="https://developers.openai.com/api/docs/deprecations" rel="noopener noreferrer"&gt;deprecations page&lt;/a&gt;. I also compared them with the &lt;code&gt;shutdown_date&lt;/code&gt; field that &lt;code&gt;GET /v1/models&lt;/code&gt; returned on 27 October 2026 (UTC): for all 90 models that carry a date there, it matched the page exactly. "Days left" is counted from 28 October 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upcoming OpenAI API shutdowns
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shutdown date&lt;/th&gt;
&lt;th&gt;What shuts down&lt;/th&gt;
&lt;th&gt;Recommended replacement&lt;/th&gt;
&lt;th&gt;Notice given&lt;/th&gt;
&lt;th&gt;Days left&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;31 Oct 2026&lt;/td&gt;
&lt;td&gt;Evals platform: existing evals become &lt;strong&gt;read-only&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.openai.com/cookbook/examples/evaluation/moving-from-openai-evals-to-promptfoo" rel="noopener noreferrer"&gt;Promptfoo migration guide&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;150 days&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 Nov 2026&lt;/td&gt;
&lt;td&gt;Evals dashboard and API&lt;/td&gt;
&lt;td&gt;Promptfoo (same guide)&lt;/td&gt;
&lt;td&gt;180 days&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 Nov 2026&lt;/td&gt;
&lt;td&gt;Agent Builder (ChatKit stays)&lt;/td&gt;
&lt;td&gt;Agents SDK or ChatGPT Workspace Agents&lt;/td&gt;
&lt;td&gt;180 days&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 Nov 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;v1/prompts&lt;/code&gt; API and reusable prompt objects&lt;/td&gt;
&lt;td&gt;Move prompt text into your own code&lt;/td&gt;
&lt;td&gt;180 days&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 Dec 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-image-1-mini&lt;/code&gt;, &lt;code&gt;gpt-image-1.5&lt;/code&gt; (and &lt;code&gt;-2025-12-16&lt;/code&gt;), &lt;code&gt;chatgpt-image-latest&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-image-2.5-sunburst&lt;/code&gt; or &lt;code&gt;gpt-image-2.5-flare&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;182 days&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11 Dec 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5&lt;/code&gt;, &lt;code&gt;o3&lt;/code&gt; (and their snapshots)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;183 days&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11 Dec 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;183 days&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11 Dec 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5-nano&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-luna&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;183 days&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11 Dec 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5-pro&lt;/code&gt;, &lt;code&gt;o3-pro&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; with &lt;code&gt;reasoning.mode: pro&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;183 days&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 Jan 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tts-1&lt;/code&gt;, &lt;code&gt;tts-1-hd&lt;/code&gt;, &lt;code&gt;gpt-4o-mini-tts&lt;/code&gt; (both snapshots)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-realtime-2.1-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;97 days&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 Jan 2027&lt;/td&gt;
&lt;td&gt;Creating &lt;strong&gt;new fine-tuning jobs&lt;/strong&gt; (existing fine-tuned models keep working until their base model retires)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;244 days&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;14 Jan 2027&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;GPT-4o&lt;/strong&gt; (&lt;code&gt;gpt-4o-2024-08-06&lt;/code&gt;, &lt;code&gt;gpt-4o-2024-11-20&lt;/code&gt;), &lt;strong&gt;GPT-4o mini&lt;/strong&gt; (&lt;code&gt;gpt-4o-mini-2024-07-18&lt;/code&gt;), &lt;strong&gt;GPT-4.1&lt;/strong&gt; (&lt;code&gt;gpt-4.1-2025-04-14&lt;/code&gt;), &lt;strong&gt;GPT-4.1 mini&lt;/strong&gt; (&lt;code&gt;gpt-4.1-mini-2025-04-14&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;gpt-6-luna&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;92 days&lt;/td&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 Jan 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-realtime&lt;/code&gt;, &lt;code&gt;gpt-4o-realtime&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-realtime-2.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 Jan 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-realtime-mini&lt;/code&gt;, &lt;code&gt;gpt-4o-mini-realtime&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-realtime-2.1-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 Jan 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-audio&lt;/code&gt;, &lt;code&gt;gpt-audio-mini&lt;/code&gt;, &lt;code&gt;gpt-4o-audio&lt;/code&gt;, &lt;code&gt;gpt-4o-mini-audio&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-audio-1.5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 Jan 2027&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-4o-mini-transcribe-2025-03-20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-4o-mini-transcribe-2025-12-15&lt;/code&gt; (see the catch below)&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26 Feb 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;whisper-1&lt;/code&gt;, &lt;code&gt;gpt-4o-transcribe&lt;/code&gt;, &lt;code&gt;gpt-4o-mini-transcribe&lt;/code&gt;, &lt;code&gt;gpt-4o-transcribe-diarize&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-live-transcribe&lt;/code&gt; or &lt;code&gt;gpt-transcribe&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26 Feb 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/v1/audio/translations&lt;/code&gt; endpoint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v1/realtime/translations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;184 days&lt;/td&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 Apr 2027&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5.1&lt;/code&gt;, &lt;code&gt;gpt-5.3-codex&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-6-sol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;182 days&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 Apr 2027&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.4-nano&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-6-luna&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;182 days&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fine-tuned versions of GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini follow the same 14 January schedule as their base models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things the table doesn't make obvious
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GPT-4o got 92 days of notice, not six months.&lt;/strong&gt; OpenAI's page says generally available models get "at least 6 months" of notice, "unless safety or compliance concerns require a faster timeline". The GPT-4 series notice went out on 14 October 2026 for a 14 January 2027 shutdown. Most other upcoming model retirements on the page got 182–184 days. If you planned around six months, you now have 78 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One recommended replacement retires 37 days after it takes over.&lt;/strong&gt; &lt;code&gt;gpt-4o-mini-transcribe-2025-03-20&lt;/code&gt; should move to &lt;code&gt;gpt-4o-mini-transcribe-2025-12-15&lt;/code&gt; by 20 January 2027. That model is itself shut down on 26 February 2027. Go straight to &lt;code&gt;gpt-transcribe&lt;/code&gt; or &lt;code&gt;gpt-live-transcribe&lt;/code&gt; and migrate once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four model families collapse into one.&lt;/strong&gt; GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini all map to &lt;code&gt;gpt-6-luna&lt;/code&gt;. If you picked a mini model for cost or latency, re-run your evals and check the bill before switching. One recommendation for all four does not mean the same price or speed as each of them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What already shut down in 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shut down&lt;/th&gt;
&lt;th&gt;Models / systems&lt;/th&gt;
&lt;th&gt;Recommended replacement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;23 Oct 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-4&lt;/code&gt;, &lt;code&gt;gpt-4-turbo&lt;/code&gt;, &lt;code&gt;gpt-4-1106-preview&lt;/code&gt;, &lt;code&gt;gpt-4o-2024-05-13&lt;/code&gt;, &lt;code&gt;o1&lt;/code&gt;, &lt;code&gt;o3-mini&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Oct 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;o1-pro&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5.6-sol&lt;/code&gt; with &lt;code&gt;reasoning.mode: pro&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Oct 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-3.5-turbo&lt;/code&gt;, &lt;code&gt;o4-mini&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Oct 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-4.1-nano&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-luna&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Oct 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-image-1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-image-2.5-sunburst&lt;/code&gt; or &lt;code&gt;gpt-image-2.5-flare&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 Oct 2026&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.4-cyber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;"The most capable cyber model available to you"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28 Sep 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-3.5-turbo-instruct&lt;/code&gt;, &lt;code&gt;gpt-3.5-turbo-1106&lt;/code&gt;, &lt;code&gt;babbage-002&lt;/code&gt;, &lt;code&gt;davinci-002&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24 Sep 2026&lt;/td&gt;
&lt;td&gt;Videos API and all Sora 2 models&lt;/td&gt;
&lt;td&gt;none listed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26 Aug 2026&lt;/td&gt;
&lt;td&gt;Assistants API&lt;/td&gt;
&lt;td&gt;Responses API + Conversations API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10 Aug 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5.2-chat-latest&lt;/code&gt;, &lt;code&gt;gpt-5.3-chat-latest&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Jul 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpt-5-chat-latest&lt;/code&gt;, &lt;code&gt;gpt-5.1-chat-latest&lt;/code&gt;, &lt;code&gt;gpt-5-codex&lt;/code&gt;, &lt;code&gt;gpt-5.1-codex&lt;/code&gt;, &lt;code&gt;gpt-5.1-codex-max&lt;/code&gt;, &lt;code&gt;gpt-5.2-codex&lt;/code&gt;, &lt;code&gt;o3-deep-research&lt;/code&gt;, &lt;code&gt;o4-mini-deep-research&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 Jul 2026&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;computer-use-preview&lt;/code&gt;, &lt;code&gt;gpt-5.1-codex-mini&lt;/code&gt;, &lt;code&gt;gpt-4o-search-preview-2025-03-11&lt;/code&gt;, &lt;code&gt;gpt-4o-mini-search-preview-2025-03-11&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Check your own account in 30 seconds
&lt;/h2&gt;

&lt;p&gt;OpenAI's page says every model in &lt;code&gt;GET /v1/models&lt;/code&gt; carries an optional &lt;code&gt;shutdown_date&lt;/code&gt; (&lt;code&gt;YYYY-MM-DD&lt;/code&gt;, or &lt;code&gt;null&lt;/code&gt; if none is announced). This prints every model your key can see that has a date, and marks the ones already past it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;

&lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.openai.com/v1/models&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;models&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shutdown_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9999&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shutdown_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PAST &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;     &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with curl and jq:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.openai.com/v1/models &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.data[] | select(.shutdown_date != null) | "\(.shutdown_date) \(.id)"'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what I saw when I ran it on 27 October 2026 (UTC). The list depends on your organisation, so yours may differ.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My key could see &lt;strong&gt;142 models&lt;/strong&gt;. &lt;strong&gt;90&lt;/strong&gt; had a &lt;code&gt;shutdown_date&lt;/code&gt;, and &lt;strong&gt;42 of those dates were already in the past&lt;/strong&gt;. That included &lt;code&gt;gpt-4&lt;/code&gt;, &lt;code&gt;gpt-3.5-turbo&lt;/code&gt;, &lt;code&gt;o1&lt;/code&gt;, &lt;code&gt;o3-mini&lt;/code&gt; and &lt;code&gt;o4-mini&lt;/code&gt; (23 October) and &lt;code&gt;computer-use-preview&lt;/code&gt; (23 July). &lt;strong&gt;A model showing up in the list does not mean it still works.&lt;/strong&gt; Compare the date with today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some snapshots have no date even though a sibling does.&lt;/strong&gt; &lt;code&gt;tts-1-1106&lt;/code&gt; and &lt;code&gt;tts-1-hd-1106&lt;/code&gt; came back with &lt;code&gt;shutdown_date: null&lt;/code&gt;, while &lt;code&gt;tts-1&lt;/code&gt; and &lt;code&gt;tts-1-hd&lt;/code&gt; retire on 6 January 2027. The same was true of &lt;code&gt;gpt-4o-search-preview&lt;/code&gt; (the &lt;code&gt;-2025-03-11&lt;/code&gt; snapshot shut down in July) and &lt;code&gt;gpt-3.5-turbo-instruct-0914&lt;/code&gt;. The deprecations page doesn't list these IDs at all. Treat &lt;code&gt;null&lt;/code&gt; as "unknown", not "safe".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to track it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The source of truth: &lt;a href="https://developers.openai.com/api/docs/deprecations" rel="noopener noreferrer"&gt;OpenAI API deprecations&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;One calendar for OpenAI, Anthropic, Mistral, Cohere and Azure OpenAI retirements, re-checked against each provider's own page every week: &lt;a href="https://llmlatency.dev/deprecations" rel="noopener noreferrer"&gt;llmlatency.dev/deprecations&lt;/a&gt;. There is also an &lt;a href="https://llmlatency.dev/deprecations/openai" rel="noopener noreferrer"&gt;OpenAI-only view&lt;/a&gt; and an &lt;a href="https://llmlatency.dev/retirement-calendar.ics" rel="noopener noreferrer"&gt;.ics feed&lt;/a&gt; you can add to Google Calendar or Outlook.&lt;/li&gt;
&lt;li&gt;A page for each model, e.g. &lt;a href="https://llmlatency.dev/migrate/openai-gpt-4o" rel="noopener noreferrer"&gt;migrating off GPT-4o&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I run llmlatency.dev, an independent tracker of AI API latency, uptime and model retirements. I have no affiliation with OpenAI. Every row in this post links back to OpenAI's own page; if you spot a mismatch, tell me in the comments and I'll fix it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>llm</category>
      <category>api</category>
      <category>ai</category>
    </item>
    <item>
      <title>AI API uptime comparison, last 30 days: OpenAI, Anthropic, Google and 43 more, measured from 4 regions</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Sun, 18 Oct 2026 10:04:53 +0000</pubDate>
      <link>https://dev.to/max_bob/ai-api-uptime-comparison-last-30-days-openai-anthropic-google-and-43-more-measured-from-4-4m41</link>
      <guid>https://dev.to/max_bob/ai-api-uptime-comparison-last-30-days-openai-anthropic-google-and-43-more-measured-from-4-4m41</guid>
      <description>&lt;p&gt;&lt;strong&gt;Short answer.&lt;/strong&gt; Between 18 September and 17 October 2026, the four most available AI APIs we probe were Meta's Llama API (99.986%), Anthropic (99.985%), OpenRouter (99.985%) and Google Gemini (99.983%). OpenAI was at 99.930%. The spread among the big providers is a few hundredths of a percent; the difference that matters shows up in the &lt;strong&gt;worst region&lt;/strong&gt;, not in the average.&lt;/p&gt;

&lt;p&gt;These are observed-availability figures, not SLAs: what an outside client saw, from four data centres, every five minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;46 AI inference APIs&lt;/strong&gt;, probed every 5 minutes from &lt;strong&gt;4 regions&lt;/strong&gt;: Germany, US Central, Tokyo and São Paulo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1,580,667 probes&lt;/strong&gt; over 30 full days (18 Sep – 17 Oct 2026, UTC).&lt;/li&gt;
&lt;li&gt;A probe is the network path to the provider's API host: DNS → TCP → TLS → first byte. It &lt;strong&gt;fails&lt;/strong&gt; on a timeout, a connection error or an HTTP 5xx. A 4xx counts as "the API answered" — the probe carries no key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attributed outage&lt;/strong&gt; = the provider failed from 2+ regions at once &lt;em&gt;and&lt;/em&gt; no other provider was failing in the same minutes. A failure seen from one region can't be separated from that network path; a failure shared with other providers has a cause above all of them.&lt;/li&gt;
&lt;li&gt;Probes run directly against each provider, never through a gateway or an aggregator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;30-day availability&lt;/th&gt;
&lt;th&gt;Worst region&lt;/th&gt;
&lt;th&gt;Worst-region availability&lt;/th&gt;
&lt;th&gt;Attributed outages&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Meta Llama API&lt;/td&gt;
&lt;td&gt;99.986%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.954%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Anthropic (Claude)&lt;/td&gt;
&lt;td&gt;99.985%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.965%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;99.985%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.977%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Google (Gemini)&lt;/td&gt;
&lt;td&gt;99.983%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.977%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;AI21&lt;/td&gt;
&lt;td&gt;99.965%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.942%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Replicate&lt;/td&gt;
&lt;td&gt;99.965%&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;99.942%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Baseten&lt;/td&gt;
&lt;td&gt;99.959%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.942%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;99.959%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.919%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Together AI&lt;/td&gt;
&lt;td&gt;99.959%&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;99.942%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;99.954%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.907%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Hyperbolic&lt;/td&gt;
&lt;td&gt;99.951%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.885%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Novita&lt;/td&gt;
&lt;td&gt;99.945%&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;99.872%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Fireworks AI&lt;/td&gt;
&lt;td&gt;99.939%&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;99.907%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;99.939%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.861%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Inference.net&lt;/td&gt;
&lt;td&gt;99.934%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.885%&lt;/td&gt;
&lt;td&gt;1 (11 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;99.931%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.850%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;99.931%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.827%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;99.930%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.814%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Baidu (ERNIE)&lt;/td&gt;
&lt;td&gt;99.928%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.792%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;xAI (Grok)&lt;/td&gt;
&lt;td&gt;99.922%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.815%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Reka&lt;/td&gt;
&lt;td&gt;99.919%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.815%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;Cerebras&lt;/td&gt;
&lt;td&gt;99.907%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.804%&lt;/td&gt;
&lt;td&gt;2 (6 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Writer&lt;/td&gt;
&lt;td&gt;99.902%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.826%&lt;/td&gt;
&lt;td&gt;1 (7 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Sarvam&lt;/td&gt;
&lt;td&gt;99.901%&lt;/td&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;99.849%&lt;/td&gt;
&lt;td&gt;1 (3 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;SiliconFlow&lt;/td&gt;
&lt;td&gt;99.893%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.746%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Nscale&lt;/td&gt;
&lt;td&gt;99.881%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.676%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;Z.ai (GLM)&lt;/td&gt;
&lt;td&gt;99.879%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.665%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;Friendli&lt;/td&gt;
&lt;td&gt;99.867%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.723%&lt;/td&gt;
&lt;td&gt;3 (5 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;Typesafe ¹&lt;/td&gt;
&lt;td&gt;99.852%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.712%&lt;/td&gt;
&lt;td&gt;1 (3 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Moonshot (Kimi)&lt;/td&gt;
&lt;td&gt;99.850%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.792%&lt;/td&gt;
&lt;td&gt;1 (36 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;Alibaba (Qwen)&lt;/td&gt;
&lt;td&gt;99.826%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.676%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Nebius&lt;/td&gt;
&lt;td&gt;99.812%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.607%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;99.806%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.561%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;Targon&lt;/td&gt;
&lt;td&gt;99.803%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.561%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;DeepInfra&lt;/td&gt;
&lt;td&gt;99.780%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.607%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;Upstage&lt;/td&gt;
&lt;td&gt;99.780%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.515%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;Tencent (Hunyuan)&lt;/td&gt;
&lt;td&gt;99.749%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.457%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;SenseNova&lt;/td&gt;
&lt;td&gt;99.667%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.249%&lt;/td&gt;
&lt;td&gt;1 (2 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;StepFun&lt;/td&gt;
&lt;td&gt;99.647%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.203%&lt;/td&gt;
&lt;td&gt;2 (1 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;Aleph Alpha&lt;/td&gt;
&lt;td&gt;99.645%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.238%&lt;/td&gt;
&lt;td&gt;4 (22 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;Featherless&lt;/td&gt;
&lt;td&gt;99.642%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;99.434%&lt;/td&gt;
&lt;td&gt;2 (4 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;SambaNova&lt;/td&gt;
&lt;td&gt;99.535%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;99.260%&lt;/td&gt;
&lt;td&gt;9 (71 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;iFlytek&lt;/td&gt;
&lt;td&gt;99.266%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;98.406%&lt;/td&gt;
&lt;td&gt;2 (11 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;ByteDance (Doubao)&lt;/td&gt;
&lt;td&gt;99.260%&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;98.891%&lt;/td&gt;
&lt;td&gt;11 (91 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;Baichuan&lt;/td&gt;
&lt;td&gt;99.243%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;98.394%&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;01.AI (Yi)&lt;/td&gt;
&lt;td&gt;97.275%&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;90.650%&lt;/td&gt;
&lt;td&gt;10 (118 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;¹ Typesafe was added to the probes on 27 September: 21 days of data instead of 30.&lt;/p&gt;

&lt;h2&gt;
  
  
  What stands out
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Uptime barely separates the large providers.&lt;/strong&gt; 24 of 46 APIs stayed at or above 99.9% over the month; the median was 99.90%. Between Anthropic and OpenAI the gap is 0.055 percentage points — about 24 minutes a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The worst region is where the differences are.&lt;/strong&gt; For 24 providers the worst region was Tokyo, for 17 it was São Paulo, for 5 Germany. US Central was never the worst region for anyone. If your users are in Asia or South America, look at the regional column, not the average.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attributed outages concentrate in a few providers.&lt;/strong&gt; 51 outages in 30 days, across 15 providers; ByteDance Doubao (11), 01.AI Yi (10) and SambaNova (9) account for more than half. The four most available APIs had none.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Limitations, stated up front
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The vantage points are cloud data centres, not consumer networks, so absolute numbers are better than an end user on mobile would see. Comparison between providers is the meaningful part.&lt;/li&gt;
&lt;li&gt;Network-level availability is not the same as a successful completion. A host that answers while the model queue is stuck still counts as up here; inference probes (real time-to-first-token requests) are reported separately.&lt;/li&gt;
&lt;li&gt;30 days is one window. The live page is rebuilt every 30 minutes from the last 24 hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Live data and the dataset
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Current uptime ranking (last 24 h): &lt;a href="https://llmlatency.dev/best-uptime" rel="noopener noreferrer"&gt;https://llmlatency.dev/best-uptime&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Per-provider status, e.g. "Is the OpenAI API down?": &lt;a href="https://llmlatency.dev/provider/openai" rel="noopener noreferrer"&gt;https://llmlatency.dev/provider/openai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Incident log with the attribution rule above: &lt;a href="https://llmlatency.dev/incidents" rel="noopener noreferrer"&gt;https://llmlatency.dev/incidents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Full daily aggregates, CC-BY-4.0, with a DOI: &lt;a href="https://doi.org/10.5281/zenodo.21954788" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.21954788&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;From Python: &lt;code&gt;pip install llmlatency&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I run llmlatency.dev, the independent tracker these numbers come from. No provider pays for placement, and nothing on the ranking is affiliate-sorted.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>No one measured AI API latency and uptime independently across regions — so I built it. 38 days and 2M probes in, here's what the data shows</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Mon, 31 Aug 2026 10:34:00 +0000</pubDate>
      <link>https://dev.to/max_bob/no-one-measured-ai-api-latency-and-uptime-independently-across-regions-so-i-built-it-38-days-and-5gd9</link>
      <guid>https://dev.to/max_bob/no-one-measured-ai-api-latency-and-uptime-independently-across-regions-so-i-built-it-38-days-and-5gd9</guid>
      <description>&lt;p&gt;If you build on hosted AI APIs, two questions quietly decide your architecture: how fast is provider X &lt;em&gt;from where your users actually are&lt;/em&gt;, and how long will the model you pinned actually live. When I went looking for measured answers, I found single-region benchmarks, vendor status pages, and numbers measured through gateways that attribute the gateway's problems to the provider. So I built an independent tracker.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works (boring on purpose)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A small prober opens a real connection to each provider's &lt;strong&gt;official API endpoint&lt;/strong&gt; every 5 minutes and times every phase of the handshake: DNS → TCP → TLS → time-to-first-byte. Separately, where possible, it measures inference &lt;strong&gt;time-to-first-token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It runs from &lt;strong&gt;4 regions&lt;/strong&gt;: Germany, US Central, Tokyo, São Paulo. Requests go directly to providers — no gateway, no aggregator, so nothing gets attributed to the wrong party.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;45 providers&lt;/strong&gt;: the usual Western labs (OpenAI, Anthropic, Google, Mistral, Groq, Together, Fireworks, Cerebras, DeepSeek…) plus Chinese ones (GLM/Zhipu, Kimi/Moonshot, Qwen, MiniMax) that rarely show up in Western benchmarks.&lt;/li&gt;
&lt;li&gt;Results land in SQLite; a static site regenerates every 30 minutes. &lt;strong&gt;38 days in: just over 2,000,000 probes.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the data shows so far
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Region beats provider.&lt;/strong&gt; Over the same 7 days, on identical requests to identical endpoints, probes from Tokyo failed &lt;strong&gt;0.315%&lt;/strong&gt; of the time vs &lt;strong&gt;0.089%&lt;/strong&gt; from Germany — a 3.5× gap. A monitor that probes from one location cannot see this, by construction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Uptime numbers lie by omission of the window.&lt;/strong&gt; Over any 24-hour window almost every provider reads ~100%. Over 7 days, &lt;strong&gt;40 of 45&lt;/strong&gt; providers dropped at least one probe. Same fleet, different window, opposite conclusion — availability quoted without a window length is not comparable to anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Availability doesn't differentiate providers; latency does.&lt;/strong&gt; Right now the fastest p50 TTFB in the fleet is ~&lt;strong&gt;99 ms&lt;/strong&gt; and the slowest is ~&lt;strong&gt;1424 ms&lt;/strong&gt; — a 14× spread between endpoints whose availability is statistically indistinguishable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. How much warning you get before a model is killed.&lt;/strong&gt; Computed from the providers' own announcement and shutdown dates across 203 dated retirements — a number nobody publishes, including the providers themselves:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Retirements tracked&lt;/th&gt;
&lt;th&gt;Median notice&lt;/th&gt;
&lt;th&gt;Shortest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;133&lt;/td&gt;
&lt;td&gt;182 days&lt;/td&gt;
&lt;td&gt;3 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;92 days&lt;/td&gt;
&lt;td&gt;0 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;63 days&lt;/td&gt;
&lt;td&gt;60 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cohere&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0 days&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0 days&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cohere's announcements land the day the model dies. A pinned model version can stop working the day you read the notice — that's a planning constraint, not a judgement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I care most about: agent-native by design
&lt;/h2&gt;

&lt;p&gt;The way people ask questions is shifting from search boxes to answer engines and agents. If your data only exists as JavaScript-rendered HTML, an agent can't reliably consume or cite it. So every page has a markdown twin, there's &lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;llms-full.txt&lt;/code&gt;, a JSON API, and an MCP server. Two observations after five weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~23% of all crawler fetches take the markdown layer, not the HTML.&lt;/li&gt;
&lt;li&gt;"A human asked their AI assistant to open the page" is now a &lt;strong&gt;bigger channel than browser clicks from AI answers&lt;/strong&gt; — I can tell them apart server-side, and the agent-initiated reads outnumber referral clicks by an order of magnitude.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;p&gt;This measures endpoint reachability and TTFB/TTFT — not model quality, not rate-limit behaviour, not incidents visible only inside a provider. Four vantage points is not the whole internet. The dataset is 38 days young, and the incident log deliberately keeps a short window because two coincidences don't make a trend.&lt;/p&gt;

&lt;p&gt;Everything is free, no accounts, no ads: &lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;llmlatency.dev&lt;/a&gt; — the deprecation calendar is at &lt;a href="https://llmlatency.dev/deprecations" rel="noopener noreferrer"&gt;/deprecations&lt;/a&gt;, measured uptime at &lt;a href="https://llmlatency.dev/best-uptime" rel="noopener noreferrer"&gt;/best-uptime&lt;/a&gt;, method and limits at &lt;a href="https://llmlatency.dev/methodology" rel="noopener noreferrer"&gt;/methodology&lt;/a&gt;. Data is CC BY 4.0.&lt;/p&gt;

&lt;p&gt;What's missing? What would you measure next?&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Update, October 2026.&lt;/strong&gt; A month-long follow-up with the full table is out: &lt;a href="https://dev.to/max_bob/ai-api-uptime-comparison-last-30-days-openai-anthropic-google-and-43-more-measured-from-4-4m41"&gt;AI API uptime comparison, last 30 days&lt;/a&gt; — 46 APIs, 1.58 million probes from 4 regions, worst region and attributed outages for each provider.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>webperf</category>
    </item>
    <item>
      <title>TTFT is not TTFB: what 45 AI APIs measured from 4 regions actually show</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Sun, 16 Aug 2026 22:04:40 +0000</pubDate>
      <link>https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61</link>
      <guid>https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61</guid>
      <description>&lt;p&gt;If you have ever compared "fastest AI API" benchmarks and found they disagree with each other, there is a good chance they were not measuring the same thing. Two numbers get used interchangeably, and they answer different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TTFB — time to first byte.&lt;/strong&gt; DNS resolution, TCP connect, TLS handshake, first response byte. The network path and the provider's front door. No model is involved at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TTFT — time to first token.&lt;/strong&gt; A real streamed completion, timed until the first token appears. That is the same network time, &lt;em&gt;plus&lt;/em&gt; queueing at the provider, &lt;em&gt;plus&lt;/em&gt; the model's prefill over your prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TTFB is the floor you pay on every single request no matter what you call. TTFT is what a human actually stares at before words show up on screen.&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;llmlatency.dev&lt;/a&gt;, which measures both continuously for ~45 inference providers from four regions (Germany, US Central, Tokyo, São Paulo). Here is what the data says about why these two numbers should never be merged into one leaderboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same region, the same probes, two different winners
&lt;/h2&gt;

&lt;p&gt;Measured from São Paulo over the last 24 hours:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;th&gt;Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lowest TTFB (edge latency)&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lowest TTFT (first token)&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;757 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;openrouter's front door answers &lt;strong&gt;3.2× faster&lt;/strong&gt; than cerebras's (58 ms vs 184 ms). And cerebras still streams its first token &lt;strong&gt;264 ms sooner&lt;/strong&gt; (757 ms vs 1021 ms).&lt;/p&gt;

&lt;p&gt;Same probes, same schedule, same region, opposite conclusions. "Which API is fastest?" is not a question with one answer until you say &lt;em&gt;which of the two&lt;/em&gt; you are paying for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most of TTFT is not the API you are benchmarking
&lt;/h2&gt;

&lt;p&gt;Here is the split for every provider where I have both numbers side by side:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requested from&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;TTFT p50&lt;/th&gt;
&lt;th&gt;TTFB p50&lt;/th&gt;
&lt;th&gt;Network share of TTFT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;764 ms&lt;/td&gt;
&lt;td&gt;233 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;900 ms&lt;/td&gt;
&lt;td&gt;296 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;33%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;757 ms&lt;/td&gt;
&lt;td&gt;184 ms&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;803 ms&lt;/td&gt;
&lt;td&gt;201 ms&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;1312 ms&lt;/td&gt;
&lt;td&gt;196 ms&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1143 ms&lt;/td&gt;
&lt;td&gt;159 ms&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;1256 ms&lt;/td&gt;
&lt;td&gt;147 ms&lt;/td&gt;
&lt;td&gt;12%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;1355 ms&lt;/td&gt;
&lt;td&gt;108 ms&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1300 ms&lt;/td&gt;
&lt;td&gt;100 ms&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1361 ms&lt;/td&gt;
&lt;td&gt;101 ms&lt;/td&gt;
&lt;td&gt;7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1021 ms&lt;/td&gt;
&lt;td&gt;58 ms&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;1485 ms&lt;/td&gt;
&lt;td&gt;68 ms&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1483 ms&lt;/td&gt;
&lt;td&gt;57 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1292 ms&lt;/td&gt;
&lt;td&gt;55 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1567 ms&lt;/td&gt;
&lt;td&gt;59 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1524 ms&lt;/td&gt;
&lt;td&gt;42 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Between &lt;strong&gt;3% and 33%&lt;/strong&gt; of time to first token is network time. The other 67–97% is the provider queueing your request and the model doing prefill.&lt;/p&gt;

&lt;p&gt;That has an uncomfortable consequence for benchmark tables: &lt;strong&gt;if a TTFT comparison does not name the model behind every number, most of what it measured was the model, not the API.&lt;/strong&gt; A 30B model will beat a 120B model on first-token time regardless of whose GPUs it runs on. Here are the models behind the numbers above, which is exactly why I do not publish them as a provider ranking:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Model answering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-oss-120b&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama-3.3-70b-versatile&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nvidia/nemotron-3-nano-30b-a3b:free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-flash-lite-latest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four different models. Ranking them against each other and calling it a provider ranking would be a category error wearing a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Fast" is meaningless without "from where"
&lt;/h2&gt;

&lt;p&gt;The regional spread is larger than the gap between most providers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Fastest region&lt;/th&gt;
&lt;th&gt;Slowest region&lt;/th&gt;
&lt;th&gt;Spread&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sambanova&lt;/td&gt;
&lt;td&gt;21 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;398 ms (Germany)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18.9×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fireworks&lt;/td&gt;
&lt;td&gt;16 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;251 ms (São Paulo)&lt;/td&gt;
&lt;td&gt;15.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;upstage&lt;/td&gt;
&lt;td&gt;58 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;596 ms (São Paulo)&lt;/td&gt;
&lt;td&gt;10.4×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aleph-alpha&lt;/td&gt;
&lt;td&gt;99 ms (Germany)&lt;/td&gt;
&lt;td&gt;568 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;5.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Identical API, identical request, an 18.9× difference depending on which continent you dialled from. A single-machine benchmark run from one US datacenter is not wrong so much as it is answering a question about that datacenter.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist for reading anyone's latency benchmark
&lt;/h2&gt;

&lt;p&gt;Including mine. If a benchmark cannot answer these, treat the number as a vibe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TTFB or TTFT?&lt;/strong&gt; If it does not say, it is usually TTFB dressed up in TTFT language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which model?&lt;/strong&gt; No model name next to a TTFT figure means the figure is about the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;From where?&lt;/strong&gt; One region is one data point, not a ranking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;p50 or p95?&lt;/strong&gt; Tail latency is where user-visible pain lives, and p95 orderings often differ from p50.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When, and how often?&lt;/strong&gt; A benchmark run once in March describes March.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How many samples?&lt;/strong&gt; My tables above sit on 57–58 samples per provider per region per day.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest limits of my own data
&lt;/h2&gt;

&lt;p&gt;TTFT is measured for &lt;strong&gt;4 of the 45 providers&lt;/strong&gt; I track. Not because the other 41 are uninteresting, but because a streamed completion requires a paid API key for each provider and every probe spends tokens. Edge latency needs no key, so TTFB is published for all 45.&lt;/p&gt;

&lt;p&gt;I would rather publish 4 measured TTFT figures than 45 estimated ones. An estimate presented as a measurement is the one thing a latency tracker must never do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything is free, and machine-readable
&lt;/h2&gt;

&lt;p&gt;The data is CC-BY-4.0. No key, no signup, CORS open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Rankings for every region, updated continuously&lt;/span&gt;
curl https://llmlatency.dev/api/rankings.json

&lt;span class="c"&gt;# Any page as markdown, for agents and scripts&lt;/span&gt;
curl https://llmlatency.dev/time-to-first-token.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is also a remote MCP server if you want your assistant to look this up mid-conversation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://llmlatency.dev/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Accept: application/json, text/event-stream'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full method, including what the probes do and do not prove: &lt;a href="https://llmlatency.dev/methodology" rel="noopener noreferrer"&gt;llmlatency.dev/methodology&lt;/a&gt;. The TTFT breakdown lives at &lt;a href="https://llmlatency.dev/time-to-first-token" rel="noopener noreferrer"&gt;llmlatency.dev/time-to-first-token&lt;/a&gt;, and the prober itself is open source at &lt;a href="https://github.com/mazamaka/llm-latency-tracker" rel="noopener noreferrer"&gt;github.com/mazamaka/llm-latency-tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have a provider you want added, or you think one of these numbers is wrong, tell me — measurements that survive being checked are the only kind worth publishing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>api</category>
    </item>
    <item>
      <title>There was no independent, measured view of AI-API latency by region — so I built one</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Thu, 23 Jul 2026 18:19:48 +0000</pubDate>
      <link>https://dev.to/max_bob/there-was-no-independent-measured-view-of-ai-api-latency-by-region-so-i-built-one-14ce</link>
      <guid>https://dev.to/max_bob/there-was-no-independent-measured-view-of-ai-api-latency-by-region-so-i-built-one-14ce</guid>
      <description>&lt;p&gt;If you build anything on top of hosted AI APIs, latency isn't a detail you get to ignore — it's a feature. A sluggish time-to-first-token is the difference between an assistant that feels alive and one that feels broken.&lt;/p&gt;

&lt;p&gt;Yet when I went looking for an honest answer to a simple question — &lt;em&gt;how fast is provider X from where my users actually are?&lt;/em&gt; — I couldn't find one. The numbers people quote tend to come from a single machine in a single region (usually somewhere in the US), from vendor-reported status pages, or from a benchmark that got run once and never refreshed. There was no independent, &lt;strong&gt;measured&lt;/strong&gt;, &lt;strong&gt;regional&lt;/strong&gt; view.&lt;/p&gt;

&lt;p&gt;So I built one: &lt;strong&gt;LLM Latency Tracker&lt;/strong&gt;, a provider-neutral tracker of latency and uptime for AI inference APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The core idea is boring on purpose: &lt;strong&gt;actually measure, don't scrape.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A small Python prober — standard library only, no API key needed for the edge probes — opens real connections to each provider's endpoint and times every phase of the handshake: &lt;strong&gt;DNS resolution → TCP connect → TLS negotiation → time-to-first-byte (TTFB)&lt;/strong&gt;. That's the &lt;em&gt;edge&lt;/em&gt; view: how long the network path itself takes before a single byte comes back.&lt;/p&gt;

&lt;p&gt;Separately, where possible, it measures inference &lt;strong&gt;time-to-first-token (TTFT)&lt;/strong&gt; — the thing your users actually feel, i.e. how long after you hit "send" the model starts streaming.&lt;/p&gt;

&lt;p&gt;Those two numbers answer different questions, and keeping them apart matters. Edge latency is about the network and the front door; TTFT is about the model and the queue behind it.&lt;/p&gt;

&lt;p&gt;The probes run from four regions — &lt;strong&gt;Europe (Germany), US Central, Asia (Tokyo), and South America (São Paulo)&lt;/strong&gt; — because "fast" is meaningless without "from where." Results land in a SQLite time-series; a static-site generator turns that into the pages you see, hosted on Cloudflare Pages, and the whole thing is &lt;strong&gt;self-updating&lt;/strong&gt; on a schedule. There's no always-on backend to rot or page me at 3am.&lt;/p&gt;

&lt;p&gt;It currently covers ~45 providers — the usual Western labs (OpenAI, Anthropic, Google, Mistral, Groq, Together, Fireworks, Cerebras, OpenRouter, Perplexity, xAI, DeepSeek…) plus Chinese ones (GLM/Zhipu, Kimi/Moonshot, Qwen, MiniMax) that rarely show up in Western benchmarks. All of it is free and open under &lt;strong&gt;CC-BY-4.0&lt;/strong&gt;, with a JSON API and an OpenAPI spec.&lt;/p&gt;

&lt;h3&gt;
  
  
  The interesting part: building it agent-native
&lt;/h3&gt;

&lt;p&gt;Here's what makes this more than another dashboard. I built it to be read by &lt;strong&gt;machines&lt;/strong&gt;, not just humans.&lt;/p&gt;

&lt;p&gt;The way people ask questions is shifting from search boxes to answer engines and agents. If your data only exists as HTML wrapped in JavaScript, an agent can't reliably consume or cite it — which means your measurements never reach the place where someone actually asks &lt;em&gt;"which provider has the lowest TTFT in Europe right now?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So the site speaks several agent dialects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;real MCP server&lt;/strong&gt; (Streamable HTTP) at &lt;code&gt;/mcp&lt;/code&gt;, exposing a &lt;code&gt;get_ai_api_latency&lt;/code&gt; tool. An agent can call it directly and get structured latency data back — no scraping, no guessing.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;MCP Server Card&lt;/strong&gt; at &lt;code&gt;/.well-known/mcp/server-card.json&lt;/code&gt;, plus &lt;strong&gt;WebMCP&lt;/strong&gt;, so agents can discover the tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;llms-full.txt&lt;/code&gt;&lt;/strong&gt;, giving models a clean map of the site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown content negotiation:&lt;/strong&gt; ask a page for &lt;code&gt;text/markdown&lt;/code&gt; and you get tidy Markdown instead of a DOM you have to reverse-engineer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The nice side effect is that building for agents forces you to build clean for everyone. The same discipline that makes a page legible to an LLM — structured, fast, no junk — is what earned a &lt;strong&gt;Lighthouse 100&lt;/strong&gt; and Cloudflare's &lt;strong&gt;"Agent-Native" (Level 5)&lt;/strong&gt; rating on their "Is Your Site Agent-Ready?" check. I won't pretend that means much on its own; it's a checklist, not a trophy. But it's a decent proxy for "this data is actually reachable."&lt;/p&gt;

&lt;p&gt;There's also a small companion: a &lt;strong&gt;model deprecation &amp;amp; migration calendar&lt;/strong&gt; at &lt;code&gt;/deprecations&lt;/code&gt;, hand-verified from official provider docs, so you can spot which models are being sunset before they break your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest limitations
&lt;/h3&gt;

&lt;p&gt;A tracker that oversells itself is worse than none, so — plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The dataset is young.&lt;/strong&gt; It's only days old as I write this. Treat trends as provisional; don't over-read a single snapshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge latency is not a full round-trip.&lt;/strong&gt; TTFB to an endpoint measures the network path, not the time to a finished generation. TTFT is closer to lived experience, but still isn't total completion time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyless network probes and keyed inference probes see different things.&lt;/strong&gt; Inference coverage is narrower than edge coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four regions is a sample, not the planet.&lt;/strong&gt; If your users sit somewhere I don't probe, your mileage will differ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a baseline and a starting point, not gospel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it / break it
&lt;/h3&gt;

&lt;p&gt;It's free, open-source, and the data is CC-BY-4.0 — use it, chart it, cite it, build on it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site: &lt;strong&gt;&lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;https://llmlatency.dev&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;JSON API: &lt;strong&gt;&lt;a href="https://llmlatency.dev/api/rankings.json" rel="noopener noreferrer"&gt;https://llmlatency.dev/api/rankings.json&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MCP endpoint: &lt;strong&gt;&lt;a href="https://llmlatency.dev/mcp" rel="noopener noreferrer"&gt;https://llmlatency.dev/mcp&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Code: &lt;strong&gt;&lt;a href="https://github.com/mazamaka/llm-latency-tracker" rel="noopener noreferrer"&gt;https://github.com/mazamaka/llm-latency-tracker&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a provider or region you care about is missing, open an issue or a PR — that's exactly the kind of contribution that makes this more useful for everyone. And if you're building agents, point one at the MCP endpoint and tell me what breaks.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Update, August 2026.&lt;/strong&gt; The single most common confusion in the replies to this post was TTFB vs TTFT, so I wrote up the measured difference — including a region where the TTFB winner and the TTFT winner are different providers: &lt;a href="https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61"&gt;TTFT is not TTFB: what 45 AI APIs measured from 4 regions actually show&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>webperf</category>
    </item>
  </channel>
</rss>
