Submit a batch of results to a run
const url = 'https://beta-api.plune.ai/v1/runs/example/results';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"results":[{"resultKey":"example","testCaseId":"example","status":"passed","rawStatus":"example","source":"example","expectedStatus":"passed","execution":{"startedAt":"example","finishedAt":"example","durationMs":1,"retry":1,"worker":"example"},"errorContext":"example","params":{},"attachments":[{}],"assertions":[{}]}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://beta-api.plune.ai/v1/runs/example/results \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "results": [ { "resultKey": "example", "testCaseId": "example", "status": "passed", "rawStatus": "example", "source": "example", "expectedStatus": "passed", "execution": { "startedAt": "example", "finishedAt": "example", "durationMs": 1, "retry": 1, "worker": "example" }, "errorContext": "example", "params": {}, "attachments": [ {} ], "assertions": [ {} ] } ] }'Idempotent by resultKey, which is unique within the run. A repeated batch answers duplicate for every element and changes nothing; an element whose key is already held with DIFFERENT content answers conflict and names the result that holds it. Both are 200 with a per-element verdict — one bad element must not cost the other 499.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Request Body required
Section titled “Request Body required ”object
object
Names the result WITHIN its run — the reporter chooses it, and sending it twice is how a retried upload stays free.
The runner’s own word, kept verbatim; status is what it maps to.
Which runner produced this — decides the mapping table used for rawStatus.
Defaults to passed. A failure that was expected is outcome: expected, not a regression.
object
Which attempt this was. Anything above 0 is what makes a pass flaky.
Redacted and truncated to 256 KB by the platform — never rejected for being large.
Part of the signature: the same case with different params is a different test.
object
object
object
Responses
Section titled “ Responses ”Per-element verdicts and counts
object
One verdict per submitted element, in the order they were sent.
object
Position in the submitted batch.
Present when accepted — the result just created.
Present on duplicate and conflict — the result already holding the key.
Present when rejected.
object
Example
{ "items": [ { "status": "accepted" } ]}Body is not a batch of submittable results
object
Example generated
{ "error": "example"}No / invalid token or session
Not found or not yours
object
Example generated
{ "error": "example"}Rate limited