The five status counters of one run
const url = 'https://beta-api.plune.ai/v1/runs/example/summary';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://beta-api.plune.ai/v1/runs/example/summary \ --header 'Authorization: Bearer <token>'Every status appears, including the ones at zero. “unmapped” counts results whose raw status the project map does not cover TODAY — the stored status of a result never changes, but whether the map has a hole in it does. “discovered” counts the tests this run turned up that have no case here yet and are still pending in the review queue: on a project’s FIRST run every result is diverted there instead of being written, so five zeros beside a non-zero “discovered” is a healthy first run, not an empty one. “waiting” counts the same pending tests in the whole project’s queue, whichever run found them: a later run that sends the same tests finds them already there, so its own “discovered” is zero while “waiting” is not. “counts.muted” sits beside the five: A failed or broken result of a muted case is counted as muted, not as a failure; a finished run never changes (#1247).
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Responses
Section titled “ Responses ”Counters, the results nobody has mapped, and the tests still waiting in review
object
Live, off the run’s results. muted holds the failures of muted cases, which are in no other counter. A failed or broken result of a muted case is counted as muted, not as a failure; a finished run never changes (#1247).
object
Whether GET /v1/runs/{id} has a CLI RunResult for this run (#1761). false for a CI import, a Cairn ingest or a lifecycle run: that route answers 404 for them by design, so a client reads this and does not ask.
How many results of the run carry at least one defect link (#1064) - a result once, however many links it has. The «· 1 with a defect» of the run line.
The sub-statuses the run’s results carry (#1231) — each name under its status, with how many — what the run report’s filter offers. In the order of the statuses, then by name; [] for none.
object
The run’s own facts (D5) — present for a run the lifecycle opened, absent for one plune sync uploaded whole.
object
Whether the run is under way — launched and rerun; false once it is finished or terminated, and for a scheduled run that waits for Launch (#1233).
What the run is for (#1232), under its tags on the report; null when nobody wrote one.
The values of the project’s custom fields (#1764); absent while the run has none.
object
The combinations the run was launched with (#1251), which byCombination and a result’s combination count in; absent for a run with none.
One combination of configuration values (#1251, ADR 0070 §2): a value of each chosen group, the groups in their order. Names are frozen at launch: a rename later changes no past run.
object
object
The group (a field with role: configuration); null with optionId for a value CI named that is not in the list.
The value (an option of the group); null for a value CI named that is not in Settings → Configurations — «not in the list», kept as it was sent.
The name of the group at launch.
The label of the value at launch.
Who launched it (B8-team T3) — «Launched by …» on the run page; null for a run from before.
The launch’s copy of who runs what, testCaseId → userId (B8-team T4) — the avatar on each «To run» row and what «Mine» keeps; null when the launch made no copy.
object
The CI run that produced the report — meta.ciUrl as the first shard declared it, the only source of the link in the run page header; null when the run has none, or holds anything but an http or https address.
The branch the run was made on — meta.branch; null when the run holds none, or an empty value.
The commit — meta.sha, in full as the shard sent it (the run page shows the first seven characters); null when the run holds none, or an empty value.
The tool that reported the run — playwright, or the report format plune run import read — not the machine of the CI; meta.runner, null when the run holds none.
The plan’s collections as they stood at launch — meta.planQuery (#1274); null for a run of no plan or launched before it.
How many cases those collections selected at launch — meta.planSelected (#1274 AC-04); null for a run of no plan or launched before it was kept.
The plan the run was launched from — meta.planId (D33); null for a run of no plan. With externalKey it makes the command the run page offers (#1233): PLUNE_RUN=<externalKey> npx playwright test --grep "$(plune plan grep <planId>)".
Expected and never reported — beside run, for the same runs.
The run group of a launch on several environments the run is one of (#1252) — «Part of group · 3 environments» and a link to GET /v1/run-groups/{id}; null for a run of its own. Beside run, for the same runs.
object
How many runs the group holds, the ones in the Bin too.
Cases a retest reset (POST /v1/runs/{id}/retest, #1767) that wait for a new result — beside run, for the same runs. They are in no counter above, not in notRun, and the run cannot finish while any are listed. [] for none.
Only for a run with configurations (#1251, ADR 0070 §4): the counts again per combination, in the order of the run’s combinations. notRun and awaitingRetest are by the pair (case, combination): a combination nobody reported has empty counts, total 0 and every expected case in notRun — none of it is counted as skipped. The run’s own notRun is then the cases with a result in no combination, its awaitingRetest the cases waiting in any one.
object
One entry per status that occurred in this combination; an absent key means zero.
object
Expected cases with no current result in this combination.
Cases a retest reset that wait for a new result in this combination; absent for none.
Only beside byCombination (#1251): the cases that have a result, by the worst of their combinations — the «4 of 120 cases failed» of the report. A case in the Bin is not counted.
object
Example
{ "counts": { "passed": 1, "failed": 1, "broken": 0, "blocked": 0, "skipped": 0, "muted": 0 }, "unmapped": 0, "discovered": 0, "hasBody": false, "withDefect": 1, "subStatuses": [ { "status": "failed", "name": "Product bug", "count": 1 } ], "run": { "kind": "automated", "statusEvent": "finished", "running": false, "externalKey": "gh-35003177826", "title": "plune · 2026-09-16 09:12 · ci", "environment": "staging", "labels": [ "plune", "vitest", "ci" ], "description": null, "startedAt": "2026-09-16T09:12:04.151Z", "finishedAt": "2026-09-16T09:12:09.082Z", "terminateReason": null, "createdBy": "u-shop", "assignees": null, "ciUrl": "https://github.com/plune-ai/plune/actions/runs/35003177826", "branch": "master", "sha": "3e31591", "runner": "playwright", "planId": null }, "notRun": [], "group": null, "awaitingRetest": []}No such run, or not yours
object
Example generated
{ "error": "example"}