Xeonr Developer Docs
API SpecificationSandboxes

TailSandboxLogs streams the sandbox's RUN LOG: what its workload command printed, as one continuous record across the sandbox's whole life.

POST
/containers.api.v1.SandboxService/TailSandboxLogs

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
AuthorizationBearer <token>

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

Connect-Protocol-Version*number

Define the version of the Connect protocol

Value in1
Connect-Timeout-Ms?number

Define the timeout, in ms

Request Body

application/connect+json

sandboxId?string
fromOffset?integer|string

Resume after this cursor. 0 starts at the oldest retained chunk.

Formatint64
follow?boolean

Stay open and stream new output as it arrives. False returns the retained history and ends.

limit?integer

Cap on history chunks replayed before live output begins. 0 = server default.

run?integer

Restrict to a single run. 0 = every run, in order.

[key: string]?never

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": {}
    }
  ]
}