TailSandboxLogs streams the sandbox's RUN LOG: what its workload command printed, as one continuous record across the sandbox's whole life.
It cannot come from the pod. A suspend DELETES the pod and a resume schedules a fresh one, so pod logs would lose everything the sandbox ever emitted at the first suspend — the same reason an App's logs are collected centrally, arrived at from the opposite direction. The control plane follows each live pod and retains what it emits.
The stream carries typed lifecycle MARKERS interleaved with the output, in the same cursor space, so "where did it crash / suspend / restart?" is a record to switch on rather than a banner to pattern-match out of the bytes.
Authorization
BearerAuth A namespace-scoped API key (cpk_…) for machines, or a Xeonr Auth OIDC
token for humans. The key's namespace and role are pinned server-side.
In: header
Header Parameters
Define the version of the Connect protocol
1Define the timeout, in ms
Request Body
application/connect+json
Resume after this cursor. 0 starts at the oldest retained chunk.
int64Stay open and stream new output as it arrives. False returns the retained history and ends.
Cap on history chunks replayed before live output begins. 0 = server default.
Restrict to a single run. 0 = every run, in order.
Response Body
application/connect+json
application/connect+json
curl -X POST "https://containers.xeonr.io/containers.api.v1.SandboxService/TailSandboxLogs" \ -H "Connect-Protocol-Version: 1" \ -H "Content-Type: application/connect+json" \ -d ''{
"chunk": {
"stderr": true,
"atUnix": 0,
"offset": 0,
"run": 0,
"data": "string"
}
}{
"code": "not_found",
"message": "string",
"details": [
{
"type": "string",
"value": "string",
"debug": {}
}
]
}