I Speed-Tested 15 AI APIs So My Clients Stop Bleeding Cash
Last Tuesday I watched a client almost cancel a $12k project because their chatbot felt "weird and laggy." The model was fine. The output was solid. The problem was that every reply took two full seconds before a single word showed up on screen. Users thought it was broken. It wasn't broken — it was just slow.
That one interaction sent me down a rabbit hole. I pulled out my laptop, fired up a stopwatch script, and started hammering endpoints. I wanted real numbers I could defend in a client meeting, not vibes. Two weeks and roughly 400 API calls later, I've got the data I needed. Here's everything I learned, with the kind of cost math that actually matters when you're the one eating the bill (or worse, padding an estimate to cover a surprise usage spike).
Why Latency Hits Different When You're Freelance
When you're salaried at a big tech shop, a 500ms delay is an "infrastructure concern." When you're freelance, a 500ms delay is the difference between a happy testimonial on your portfolio and a refund request at 11pm on a Saturday.
I think about every API call in terms of billable context. If I'm building a chatbot that handles 100k conversations a month and each one eats an extra second of model time, that's roughly 27 hours of compute I'm not getting paid for. At my rate, that's real money. Worse, if the slowness causes even 5% of users to bounce, I've effectively burned a chunk of my client's LTV because I picked the wrong model.
So I built a benchmark harness. Nothing fancy — just Python, a CSV log, and a stopwatch. I tested 15 models through Global API's endpoint because it's the single proxy I trust that gives me access to basically everything without juggling 12 different API keys and dashboards.
How I Ran the Tests
I kept it boring on purpose. Boring benchmarks are repeatable benchmarks.
- Date run: May 20, 2026
- Regions: US East (Ohio) and Asia (Singapore)
- Prompt: "Explain recursion in 200 words"
- Target output: ~150 tokens per call
- Runs: 10 per model per region, averaged
- Streaming: Yes, SSE
-
Endpoint:
https://global-apis.com/v1
I measured two things: Time to First Token (TTFT) — basically how long until I see the first word — and sustained tokens per second during the stream. Reasoning models like DeepSeek-R1 and Kimi K2.5 get penalized on TTFT because they "think" internally before emitting anything, which is worth knowing if you're shopping blind.
The Speed Leaderboard (My Actual Results)
Here's the full table, sorted by tokens per second. This is the one I keep open in a tab whenever I'm scoping a new project.
| Rank | Model | TTFT | tok/s | Provider | $/M Output |
|---|---|---|---|---|---|
| 1 | Step-3.5-Flash | 120ms | 80 | StepFun | $0.15 |
| 2 | Qwen3-8B | 150ms | 70 | Qwen | $0.01 |
| 3 | DeepSeek V4 Flash | 180ms | 60 | DeepSeek | $0.25 |
| 4 | Hunyuan-TurboS | 200ms | 55 | Tencent | $0.28 |
| 5 | Doubao-Seed-Lite | 220ms | 50 | ByteDance | $0.40 |
| 6 | Qwen3-32B | 250ms | 45 | Qwen | $0.28 |
| 7 | Hunyuan-Turbo | 280ms | 42 | Tencent | $0.57 |
| 8 | GLM-4-32B | 300ms | 38 | Zhipu | $0.56 |
| 9 | Qwen3.5-27B | 350ms | 35 | Qwen | $0.19 |
| 10 | DeepSeek V4 Pro | 400ms | 30 | DeepSeek | $0.78 |
| 11 | MiniMax M2.5 | 450ms | 28 | MiniMax | $1.15 |
| 12 | GLM-5 | 500ms | 25 | Zhipu | $1.92 |
| 13 | Kimi K2.5 | 600ms | 20 | Moonshot | $3.00 |
| 14 | DeepSeek-R1 | 800ms | 15 | DeepSeek | $2.50 |
| 15 | Qwen3.5-397B | 1200ms | 10 | Qwen | $2.34 |
The first thing that jumped out: the cheap models aren't just cheap, they're fast. Qwen3-8B at $0.01/M and 70 tok/s is the kind of number that makes me rethink my entire cost structure for simple jobs. Step-3.5-Flash is the outright speed champion — 80 tokens a second and a TTFT that feels like a local script.
What I Actually Deploy (And Why)
I've stopped picking models by brand name. I pick by what the client is paying me to deliver. Let me walk through the tiers the way I think about them during a scoping call.
The Penny-Pincher Tier (Under $0.15/M output)
- Qwen3-8B — 70 tok/s at $0.01/M
- Step-3.5-Flash — 80 tok/s at $0.15/M
Honestly, for a FAQ bot, a tag generator, or a "summarize this email" button, Qwen3-8B is borderline absurd. I built a tool for a client last month that classifies support tickets — the bill for the entire month was under two dollars. Two. Dollars. And the speed meant the response showed up before the user's finger left the button.
Step-3.5-Flash is what I reach for when I need a little more reasoning but still want sub-150ms TTFT. It's my default for any "instant feedback" UI element.
The Sweet Spot ($0.15–$0.30/M)
- DeepSeek V4 Flash — 60 tok/s at $0.25/M
- Hunyuan-TurboS — 55 tok/s at $0.28/M
- Qwen3-32B — 45 tok/s at $0.28/M
DeepSeek V4 Flash is the model I push to most of my clients. The TTFT lands at 180ms, which feels instant to a human, and the quality is close enough to GPT-4o-class that I haven't had a single complaint in production. At $0.25/M output, my margin stays healthy even when the client is suddenly running 3M tokens a day.
Hunyuan-TurboS is a backup. It's a touch slower and slightly more expensive, but the instruction-following is borderline uncanny. I'll swap to it when a client is doing structured data extraction and even a 2% accuracy bump matters.
The Mid-Range ($0.30–$0.80/M)
- Doubao-Seed-Lite — 50 tok/s at $0.40/M
- GLM-4-32B — 38 tok/s at $0.56/M
- Hunyuan-Turbo — 42 tok/s at $0.57/M
- DeepSeek V4 Pro — 30 tok/s at $0.78/M
This is where I start having a conversation with the client about whether they need a "good" answer or a "great" answer. Doubao-Seed-Lite still feels snappy at 50 tok/s and the price is reasonable for moderate-volume workflows. The moment we cross 40 tok/s and TTFT starts creeping past 300ms, I usually only deploy these for batch jobs — things like overnight report generation where nobody's waiting on the spinner.
The Premium Tier ($0.80+/M)
- MiniMax M2.5 — 28 tok/s at $1.15/M
- GLM-5 — 25 tok/s at $1.92/M
- Kimi K2.5 — 20 tok/s at $3.00/M
These are my "we got a real problem and money is secondary" models. GLM-5 in particular punches above its weight on long-context reasoning. I'll route legal documents and contract analysis through it when the client is billing by the hour and the output quality directly affects their revenue. Kimi K2.5 is reserved for the most brutal tasks — at $3.00/M it's not something I let run unattended.
I also want to flag DeepSeek-R1 and Qwen3.5-397B separately. They show up slow (800ms and 1200ms TTFT respectively) because of the internal reasoning pass. That's not a bug, it's the design. I use R1 when I need visible chain-of-thought reasoning that the client can audit. Qwen3.5-397B I almost never touch for interactive work — it's a research-grade model with research-grade latency.
The Geography Tax (Or Discount)
Here's something I learned the hard way: where your client is physically located changes the math.
I ran the same prompt from Singapore and from Ohio. Asian-hosted models (Qwen, GLM, Kimi) shaved 16-20% off their TTFT when called from Asia. That makes sense — servers are closer. But it also means a US-based client gets a worse experience on those models.
| Model | US East TTFT | Asia TTFT | Difference |
|---|---|---|---|
| DeepSeek V4 Flash | 180ms | 150ms | -30ms |
| Qwen3-32B | 250ms | 210ms | -40ms |
| GLM-5 | 500ms | 420ms | -80ms |
| Kimi K2.5 | 600ms | 480ms | -120ms |
DeepSeek's infrastructure is the most evenly distributed — barely a 30ms swing between continents. If my client has users in multiple regions and I can't deploy separate endpoints per region, DeepSeek V4 Flash is the safe default.
For pure Asia-Pacific deployments, though, the savings are real. A 120ms improvement on Kimi K2.5 doesn't sound huge until you multiply it across millions of requests. That's actual user retention.
The TTFT Cheat Sheet I Keep Open
When I'm in a kickoff call and the PM asks "how fast will it feel?" I refer back to this:
- Under 200ms — Instant. Users won't perceive a delay. Excellent UX.
- 200–400ms — Fast. Acceptable for any interactive surface.
- 400–800ms — Noticeable. Some users will start tapping the screen twice.
- 800ms+ — Slow. People will think the app is broken and leave.
My rule of thumb: if it's a chat UI, I don't ship anything over 400ms TTFT. If it's a "Generate Report" button that the user explicitly clicked, I'll tolerate up to 800ms. Beyond that, I either find a faster model or queue the request and notify the user asynchronously.
How I Actually Wire This Up
Here's the Python snippet I use in basically every project. It hits the Global API endpoint and streams output so the TTFT metric actually reflects what the end user sees:
python
import requests
import time
API_KEY = "your-global-api-key"
BASE_URL = "https://global-apis.com/v1"
def stream_chat(prompt, model="deepseek-v4-flash"):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
"stream": True,
"max_tokens": 200
}
start = time.time()
first_token_time = None
token_count = 0
Top comments (0)