Skip to content
DurkBench

Developers

Read our lab results as JSON. Same numbers as the boards, taken every hour on our lab machine. No key, no account.

Before you start

Plain GET, open to all
Every path below answers a normal GET. There is no key, no token, and no rate-limit header. Nothing here writes anything.
Open and uncached
Every data route sends Access-Control-Allow-Origin: * and Cache-Control: no-store. We skip OPTIONS preflight, so keep request headers simple. Our numbers change every hour — cache on your side and do not poll faster.
Windows and rows
Most routes take ?hours= (bad values fall back to the default; anything over 720 is clamped). /api/runs takes ?limit= instead. Summary blocks hold only clean current-kit rows; raw samples hold everything, fails included.

Your first call

No setup step comes before this. Paste either one and you have our newest numbers.

curl -s "https://durkbench.com/api/status"
const res = await fetch("https://durkbench.com/api/speed?hours=24");
const { models } = await res.json();
// models is sorted fastest first, so [0] is the current leader.
console.log(models[0]?.model, models[0]?.medianWallTokensPerSec, "wall tok/s");

Data endpoints

Five JSON routes. Every board on this site is built from these and nothing else. Each entry folds a trimmed real response under Sample response.

Community reports

Opinion data from the Share your take button. It is a separate module and it can be switched off.

Files, feeds, and images

Not JSON, but public and live in the same way.

The live badge

Paste it in a README or a status page. It redraws itself with our newest number every time it loads.

Live badge: DurkBench plus the current fastest model and its wall tokens per second

Markdown:

![DurkBench](https://durkbench.com/badge)
![Fable 5 on DurkBench](https://durkbench.com/badge?model=fable)

Model slugs

Use any of these in ?model= on the badge, in ?a=, ?b=, and ?c= on Compare, and in the /models/ address.

Featured

Other models

The full model id works too — ?model=claude-fable-5 lands on the same row as ?model=fable — and an unknown slug is not an error: the page just renders with no data. Retired models keep their slug and their old samples, but no new rows arrive.

If you republish our numbers

How to read this

These feeds carry our own measurements from one lab machine on one home connection, not the official speed of any model. There is no uptime promise: the lab can be down and a window can be empty. Write your client so an empty array is a normal answer, not a failure. Test kit bumps are announced on Changelog — watch it before you pin a parser.