kimik3.io/Latency

Kimi K3 latency

No official benchmarks exist yet, and the numbers circulating are community guesses. So we timed it ourselves on launch day.

Median time to first token: 2.8 seconds on a trivial prompt (range 2.7–3.3s across five streaming runs) — and that first token is reasoning: K3 thinks before it answers, by design. Long context scales roughly linearly: 98,625 tokens took 10.5s, 497,718 took 52 seconds. Design for it — stream, and set timeouts in minutes — and none of it ever reaches your users. The setup is below.

Measured from a single client against api.moonshot.ai on 2026-07-16 — how we measured, and what these numbers are not.

Time to first token

Five streaming runs, trivial prompt ("Count to three"), 128-token ceiling:

Streaming, kimi-k3, 2026-07-16. TTFT = first token of any kind, which on K3 is reasoning.
RunFirst tokenFirst content tokenTotal
12.74s4.62s4.62s
22.81snever arrived5.78s
33.35s4.12s4.37s
43.28snever arrived6.26s
52.82snever arrived5.82s

Median TTFT is 2.82s. But look at the middle column: three of five runs never produced a content token at all. That is not a latency result — it is the reasoning-budget trap caught in the wild. A 128-token ceiling was entirely consumed by thinking, so the stream ended having emitted only reasoning. If you are streaming K3 to a user, this is what a silent failure looks like.

The gap between first token and first content token is the part that matters for perceived speed: on run 1, reasoning started at 2.74s but the answer only began at 4.62s. If you render reasoning_content, users see motion at ~2.8s. If you don't, they stare at a spinner for ~4.6s.

Long context

Non-streaming, trivial output, so this is essentially "how long until K3 has read your prompt and thought about it":

Wall clock grows with the prompt

Seconds per call, trivial output · measured 2026-07-16

10 s 30 s 50 s ~90 98,625 497,718 ~90 prompt tokens — 3.6 s 98,625 prompt tokens — 10.5 s 497,718 prompt tokens — 52.0 s 3.6 s 10.5 s 52.0 s prompt tokens
Single non-streaming run each, before K3 writes anything. Roughly linear in prompt size — and a warm cache does not shorten it.
Single run each, kimi-k3, 2026-07-16. Input cost at the $3.00/1M cache-miss rate.
prompt_tokensWall clockInput cost, one call
~903.6s$0.0003
98,62510.5s$0.30
497,71852.0s$1.49

Half a million tokens is 52 seconds and $1.49 for a single request, before K3 writes anything. The million-token window is real, but it is neither fast nor free — and at ~5× the tokens, we saw ~5× the wall clock, so the ~1M ceiling plausibly lands near two minutes. We did not test it; that would be inference, not measurement.

Speed comes from design, not caching

A reasonable hope: warm the prefix, skip the work, get the latency back. We tested it. It does not hold. Comparing cold and warm calls on identical prefixes, wall clock did not consistently improve — 3.56s→3.80s, 3.02s→4.29s, 3.99s→3.54s, 4.38s→4.27s, 5.22s→3.78s. Run-to-run variance swamped any cache effect.

The reason is structural: K3 spends seconds reasoning on every call regardless of whether the prompt was cached, and that dominates the timeline. Caching is a billing optimisation, not a latency one.

What to do about it

  • Stream, always. Non-streaming at long context means a minute of silence. stream: true plus stream_options: {"include_usage": true}.
  • Set client timeouts in minutes. Default SDK timeouts will kill legitimate long-context calls. We measured 52s on a single request that succeeded.
  • Decide what to do with the reasoning gap. ~2.8s to first reasoning token, ~4.6s to first content token. Either show thinking, or show a spinner that expects to run for several seconds.
  • Don't put K3 in a synchronous request path that a human is waiting on with a short budget. It thinks. That is the product.
  • Trim your context. The latency scales with prompt size, and unlike cost, there is no cache discount to blunt it.

What these numbers are not

They are not a benchmark. Single client, single network path, single day, sample sizes of one to five. They carry our route to Moonshot's servers and whatever load Moonshot was under on launch day — a date when a brand-new flagship model is presumably busy.

What dominates every number here is K3 thinking, measured in seconds. Network routing — including the hop through a pass-through gateway — is milliseconds against that, which is why we treat these as K3's timings rather than any one endpoint's. Where we ran them.

Read them as magnitudes, not measurements of the model: seconds not milliseconds to first token; tens of seconds not seconds at 100k; a minute not ten seconds at 500k. That is the shape of the thing, and it is enough to design around. We will re-run and re-stamp as the launch-day load settles.

Time it on your own path

Our latency depends on our network; yours won't match. EvoLink carries kimi-k3 on an OpenAI-compatible endpoint — 10 free credits, sign up from anywhere — no Chinese phone number.

Get an EvoLink API key