Xeonr Developer Docs
API SpecificationApps

TailAppLogs streams an App's output: retained history first, then live.

POST
/containers.api.v1.AppService/TailAppLogs

An App's replicas are interchangeable and individually disposable, so its logs cannot live only in its pods — the instance that emitted the line you need is often the one that died. The control plane therefore collects and retains them, and this reads that record, merged across replicas and tagged with which one produced each chunk.

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

appId?string
replica?string

Restrict to a single replica. Empty = every replica, merged.

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, which is what a one-shot fetch wants.

limit?integer

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

[key: string]?never

Response Body

application/connect+json

application/connect+json

curl -X POST "https://containers.xeonr.io/containers.api.v1.AppService/TailAppLogs" \  -H "Connect-Protocol-Version: 1" \  -H "Content-Type: application/connect+json" \  -d ''
{
  "chunk": {
    "replica": "string",
    "data": "string",
    "stderr": true,
    "atUnix": 0,
    "offset": 0
  }
}
{
  "code": "not_found",
  "message": "string",
  "details": [
    {
      "type": "string",
      "value": "string",
      "debug": {}
    }
  ]
}