Skip to content

Submit a batch of results to a run

POST
/v1/runs/{id}/results
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.

id
required
string
Media type application/json
object
results
required
Array<object>
>= 1 items <= 500 items
object
resultKey
required

Names the result WITHIN its run — the reporter chooses it, and sending it twice is how a retried upload stays free.

string
testCaseId
required
string
status
string
Allowed values: passed failed broken blocked skipped
rawStatus

The runner’s own word, kept verbatim; status is what it maps to.

string
source

Which runner produced this — decides the mapping table used for rawStatus.

string
expectedStatus

Defaults to passed. A failure that was expected is outcome: expected, not a regression.

string
Allowed values: passed failed broken blocked skipped
execution
object
startedAt
required
string
finishedAt
required
string
durationMs
required
integer
retry

Which attempt this was. Anything above 0 is what makes a pass flaky.

integer
worker
string
errorContext

Redacted and truncated to 256 KB by the platform — never rejected for being large.

string
params

Part of the signature: the same case with different params is a different test.

object
key
additional properties
any
attachments
Array<object>
<= 50 items
object
key
additional properties
any
assertions
Array<object>
object
key
additional properties
any

Per-element verdicts and counts

Media type application/json
object
items
required

One verdict per submitted element, in the order they were sent.

Array<object>
object
index
required

Position in the submitted batch.

integer
resultKey
required
string
status
required
string
Allowed values: accepted duplicate conflict rejected
id

Present when accepted — the result just created.

string
existingId

Present on duplicate and conflict — the result already holding the key.

string
reason

Present when rejected.

string
counts
required
object
accepted
required
integer
duplicate
required
integer
conflict
required
integer
rejected
required
integer
Example
{
"items": [
{
"status": "accepted"
}
]
}

Body is not a batch of submittable results

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

No / invalid token or session

Not found or not yours

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

Rate limited