Skip to content

Change a manual mark

PATCH
/v1/results/{id}
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.tspatchResult): 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.

id
required
string
Media type application/json

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
status
string
Allowed values: passed failed broken blocked skipped
errorContext

null clears the message; redacted and truncated like a submission’s.

string
nullable
steps
Array<object>
nullable <= 200 items
object
index
required

The step’s position in the case’s steps, from 0.

integer
status
required
string
Allowed values: passed failed skipped
Example
{
"status": "passed",
"errorContext": null,
"steps": [
{
"index": 0,
"status": "passed"
},
{
"index": 1,
"status": "passed"
},
{
"index": 2,
"status": "passed"
}
]
}

The result as it is now

Media type application/json
object
key
additional properties
any
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

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

No / invalid token or session

No such manual result in your projects — a reporter’s result reads as not found

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

The run is closed

Media type application/json
object
error
required
string
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.

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}
Retry-After
integer

Seconds until the window rolls over