Change a manual mark
const url = 'https://beta-api.plune.ai/v1/results/example';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"status":"passed","errorContext":null,"steps":[{"index":0,"status":"passed"},{"index":1,"status":"passed"},{"index":2,"status":"passed"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://beta-api.plune.ai/v1/results/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "status": "passed", "errorContext": null, "steps": [ { "index": 0, "status": "passed" }, { "index": 1, "status": "passed" }, { "index": 2, "status": "passed" } ] }'The «To run» section of the run page (D34, api.ts → patchResult): a person who marked a case changes the mark — its status, its message, its steps — in place, while the run is open. Only a result with source: manual answers: a reporter’s result is evidence, and a run of 40 cases must not count 41 because one mark was corrected. Audited under the run.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Request Body required
Section titled “Request Body required ”At least one key. Only a result with source: manual in an open run takes a patch — a reporter’s result is evidence and stands (404), and a closed run keeps its marks (409). outcome is recomputed from the new status.
object
null clears the message; redacted and truncated like a submission’s.
object
The step’s position in the case’s steps, from 0.
Example
{ "status": "passed", "errorContext": null, "steps": [ { "index": 0, "status": "passed" }, { "index": 1, "status": "passed" }, { "index": 2, "status": "passed" } ]}Responses
Section titled “ Responses ”The result as it is now
object
Example
{ "id": "6f1c2b3a-0000-4000-8000-0000000000e1", "runId": "6f1c2b3a-0000-4000-8000-0000000000d1", "testCaseId": "6f1c2b3a-0000-4000-8000-0000000000c1", "resultKey": "manual:6f1c2b3a-0000-4000-8000-0000000000c1", "signature": "7f974c61f8f10065cd8ae6993cc069e4f85b1db1ed008b965885fb6f945a28c9", "status": "passed", "rawStatus": null, "source": "manual", "expectedStatus": "passed", "outcome": "expected", "execution": null, "durationMs": null, "caseVersion": 1, "errorContext": null, "errorContextMeta": null, "assertions": [], "steps": [ { "index": 0, "status": "passed" }, { "index": 1, "status": "passed" }, { "index": 2, "status": "passed" } ], "executedBy": null, "createdAt": "2026-09-16T09:12:04.151Z"}Invalid body, or nothing to change
object
Example generated
{ "error": "example"}No / invalid token or session
No such manual result in your projects — a reporter’s result reads as not found
object
Example generated
{ "error": "example"}The run is closed
object
Example
{ "error": "the run is closed — its results stand"}Rate-limited: either the per-route throttle or a tenant quota. Retry-After carries the seconds until the window rolls over.
object
Example generated
{ "error": "example"}Headers
Section titled “Headers ”Seconds until the window rolls over