API changelog
Every change to the Squally read API, newest first.
v1, beta. The API may change until the beta ends; every change is listed in the changelog (docs/openapi/CHANGELOG.md).
v1 is in beta: the API may change until the beta ends, and every change is
listed here, newest first. The document itself is v1.json, generated from
the code (npx tsx scripts/generate-openapi.ts).
1.0.0-beta, document only — 2026-09-24 (fifth)
No change to any endpoint, and timeLostMs keeps its type (number | null) -
but what the API PUTS in it changed, so the description did too.
/projects/{projectId}/flaky:timeLostMsis now computed for every listed test. It used to be computed only for tests that had both passed and failed in the window, so a test that never passed - and a test that passes in every run but only on the retry - came back asnull. Both now carry a number, and the two are usually the largest on the list.- The field description no longer says
nullmeans “never passed in the window - the worst case”. It describes the arithmetic (wasted attempts x the final attempt duration, where a failed run wastes every attempt and a retry-rescued run wastes the ones before the retry), states that0is a real measurement, and saysnullis a guard that should not occur on this response. - Sorting by
timeLostputsnulllast instead of first, for the same reason: it no longer marks the worst case.
1.0.0-beta, document only — 2026-09-24 (fourth)
No change to any endpoint or response.
x-error-codes: theactionoftest_not_foundnow reads “Check the test name and filePath exactly as Squally shows them; do not retry.” It used to tell the caller to URL-encode the name - right for an HTTP request, wrong for an agent passing the name as a tool argument, which then gets encoded twice. The encoding rule for HTTP callers is unchanged, in thetestNameparameter description.
1.0.0-beta, document only — 2026-09-24 (third)
No change to any endpoint or response, and no operationId changed.
- Every operation has a short
summary(“List runs”, “Get test status”, …). The longer sentence each had before is now the first sentence of itsdescription. - Operations are grouped by
tags, each with a one-line description, listed on the document in this order: Projects, Runs, Tests, Flakiness, Errors, Project.
1.0.0-beta, document only — 2026-09-24 (second)
No change to any endpoint or response. The document carries more of what a client needs:
x-error-codeson the document: every error code the API can answer with, one entry each -code,status,when(the sentence the API sends),action(what to do) andhasBody(false only for 429, which the edge answers without a JSON body).- Retry rules in the description, in one place: 429 - wait 60 seconds, then retry; 5xx - exponential backoff from 1 second, capped at 30 seconds; 400, 401, 403, 404 - never retry. This replaces “back off for at least 60 s”.
- An example body for every 200 response. The data is invented.
- This changelog is served at
/openapi/CHANGELOG.md.
1.0.0-beta, document only — 2026-09-24
No change to any endpoint or response. The document reads better:
- Error responses carry their schema inline, with
codelimited to the slugs that route answers with at that status, and one full example (errorandcode) per slug. The sharedcomponents/schemas/ApiErroris gone; the shape it described is unchanged. - Integers no longer carry the ±9007199254740991 bounds, and date-time
fields no longer carry a regex next to
format: date-time.
1.0.0-beta — 2026-09-23
First published version. Twelve read endpoints under /api/v1: projects,
runs (list, one run, a test’s attempts with the Copy-for-AI prompt), branches,
flaky tests, a test’s stored status and history, error signatures (list and
one), the dashboard overview, and project settings.