A valid request URL is required to generate request examples{
"ok": true
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "payload_too_large",
"message": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "<string>"
}
}Report the run's outcome
How a worker says it is done. It lives on this surface rather than on the run surface because a worker holds exactly one credential, its run token, and should never need an org credential to close its own work. The token also pins WHICH run is being reported, so a worker cannot close somebody else’s.
needs_user_control parks the run for a person, who lifts it through the run surface. Secrets never travel in this body.
Once a run is parked, only a person can end it: a succeeded or failed report on a parked run is refused with a 409 until someone resumes or cancels it. Reporting needs_user_control again is allowed and only refreshes the handoff instruction.
This operation reads no Authorization header. The run token in the path IS the credential, so the whole url is secret: never log it, paste it, or commit it. Every example writes {runToken} for that reason.
A valid request URL is required to generate request examples{
"ok": true
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"ok": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "payload_too_large",
"message": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "<string>"
}
}Path Parameters
The run token. Write {runToken}; never write a real one down.
Body
The outcome, and optionally what happened.
The outcome being reported.
succeeded, failed, needs_user_control Free text. No VALUE of this field is refused: long values are truncated at 4000 characters (on a character boundary, so an emoji is not split), a NUL (U+0000) is replaced with U+FFFD because it cannot be stored, and every other character is recorded verbatim. A report is a run reaching its terminal state, so a refusal here would strand the run. The one limit that still applies is the request-wide 1 MiB body cap, which is a transport limit and answers 413 before this field is read: keep the whole request under it, or the run does not terminate.
Response
The report was recorded.