These are the public cloud endpoints your self-hosted runner process calls. Set RUNNER_API_BASE on the worker to match your deployment (same host as below).
runnerToken from createRunnerInstance). Format for workers: credentialId.secret. Use this as Authorization: Bearer … for lease, heartbeat, context, complete, and fail. It is not your login password and not your Firebase session.Authorization: Bearer with the Firebase ID token for the signed-in user. Your worker should never use this token to dequeue or complete jobs.All paths below are HTTPS functions on: https://cloud.xenonflare.com
See Runners & queues for pools, keys, and how jobs are targeted. JSON request and response bodies use Content-Type: application/json unless noted.
Same operations as Settings → Runners. Use a Firebase ID token (Bearer) only on these three routes — not for the job loop below.
https://cloud.xenonflare.com/createRunnerInstanceAuth: Bearer: Firebase ID token (signed-in Studio user). Body: { "kind": "user"|"global", "name"?: string }. Global requires admin doc admins/<uid>.
201 — { instanceId, credentialId, runnerToken, kind, name }. The field runnerToken is the Runner API key; store it once — it won't be shown again.
https://cloud.xenonflare.com/revokeRunnerInstanceAuth: Bearer: Firebase ID token. Body: { "instanceId" }.
200 — { "ok": true }
https://cloud.xenonflare.com/updateRunnerInstanceAuth: Bearer: Firebase ID token. Body: { "instanceId", "name" }.
200 — { "ok": true, "name" }
Use the Runner API key only — the value returned as runnerToken when the instance was created, formatted as credentialId.secret in the Authorization: Bearer header (see the open-source runner README).
https://cloud.xenonflare.com/leaseWorkspaceJobAuth: Bearer: Runner API key (credentialId.secret).
Body: (empty object).
200 — either { "leased": false } or { "leased": true, "workspaceId", "leaseExpiresAt", "workspace": { ... } }. Global instances only see target: "global" jobs; user instances only jobs for that owner with target: "user".
https://cloud.xenonflare.com/heartbeatWorkspaceJobAuth: Bearer: Runner API key.
Body: { "workspaceId" }
200 — { "ok": true, "leaseExpiresAt": <ms> }
409 — no active lease for this workspace/instance.
https://cloud.xenonflare.com/getWorkspaceRunnerContextAuth: Bearer: Runner API key.
Body: { "workspaceId" }
Returns compiled chat + workspace fields for the runner (large JSON). Requires an active lease.
https://cloud.xenonflare.com/updateWorkspaceRunnerSummaryAuth: Bearer: Runner API key.
Body:
{
"workspaceId",
"summaryText": "<string, large cap>",
"fromMessageId": "<message id>",
"throughMessageId": "<message id>"
}Requires active lease. Used when the runner summarizes older messages before generation.
https://cloud.xenonflare.com/completeWorkspaceJobAuth: Bearer: Runner API key.
Body (JSON): includes workspaceId, assistantMessage (narrative, may include {{artifact:...}} placeholders), and arrays files, charts, datasets (tables), lists, checklists, svgs as produced by the worker. See Deliverables for shapes and caps.
400 — validation error on any payload slice.
https://cloud.xenonflare.com/failWorkspaceJobAuth: Bearer: Runner API key.
Body: { "workspaceId", "error": "<short string>" }
200 — { "ok": true } on success.