Take the numbers. All of them.
Every measurement Q-Advantage publishes is readable as JSON, without a key, a login, or a rate limit. Responses are prerendered at build time, so they are static files served from the edge — and every measurement carries the URL of the GitHub Actions run that produced it. If a number here cannot be traced to a run, it is a bug, not a rounding.
Discovery first, then the data.
Start at /availability so you are reading identifiers that exist rather than guessing them.
curl https://qadvantage.io/api/v1/availabilitycurl https://qadvantage.io/api/v1/latestcurl https://qadvantage.io/api/v1/algorithms/ml-kem-768/historycurl https://qadvantage.io/openapi.json7 operations.
Generated from the route handlers themselves — this list cannot document something that does not exist.
| Endpoint | What it returns |
|---|---|
| /api/v1/algorithms/{id}/historyRead an algorithm's measured series | Every committed measurement for one algorithm, per operation, oldest first. Measured points only — there is no value between two runs and the series must not be resampled as though it were continuous. |
| /api/v1/availabilityList what can be asked for | Discovery. Returns the algorithms, operations, protocol tracks, architectures and run-date range actually present, plus the endpoint list. Start here rather than guessing identifiers. |
| /api/v1/latestRead the newest run | The most recent daily benchmark run in full: every algorithm, every operation, all nine timing fields, with the run's provenance block. |
| /api/v1/protocolsRead the composed protocol tracks | TLS and SSH handshake suites with their phase decomposition, wire sizes, amplification factor and classical baseline, plus the signature, AES-GCM and stateful-signature tracks, per architecture. |
| /api/v1/reliabilityRead measurement reliability | Per-run counts of algorithm measurements attempted and succeeded, with CPU steal. Reported as counts rather than a bare percentage — the same rate over two runs and over ninety-four are different claims. |
| /api/v1/runsList all runs | Index of every committed run, newest first, each with its commit, Actions run URL, CPU-steal figure and a link to the full payload. |
| /api/v1/runs/{date}Read one run | One run by date (YYYY-MM-DD). Only dates present in the index resolve; anything else is a 404 rather than an empty run. |
What the fields mean.
Read this before you write a parser.
null is null A field that is absent or null was not measured. It is never zero-filled, defaulted, or carried over from a previous run. A zero timing would read as “instant”, which is a claim the data does not make.
run_url Every measurement-bearing object carries the GitHub Actions run that produced it. This is the point of the whole thing.
units Timings are microseconds (_us), sizes are bytes (_bytes), throughput is operations per second. Dates are YYYY-MM-DD; timestamps are UTC ISO 8601.
additive Fields get added, never repurposed or silently dropped. A breaking change gets a new version prefix.
404 A date or identifier that was never measured returns 404 with an error string — never an empty record that a parser might read as “measured, and it was nothing”.
Or skip the API entirely.
The underlying result files are committed to the public repository — the API is a convenience over them, not a gate in front of them.