Sign Up

Admin

GET /manage/global-refs

GET
/manage/global-refs

List the normalized bare registry refs that this cell routes globally. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The set is evaluated in the cell-local routing snapshot alongside images.global.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Global registry refs for this cell

application/json
  1. response
refs*array<>
curl -X GET 'https://example.com/manage/global-refs'
{  "refs": [    {      "created_at": "2019-08-24T14:15:22Z",      "note": "string",      "ref": "string"    }  ]}

POST /manage/global-refs

POST
/manage/global-refs

Add or update a normalized bare registry ref in this cell's global-routing set. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The set is cell-local because the routing snapshot is cell-local.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Request Body

application/json
  1. body
note?string|null
ref*string

Response Body

Global ref added or updated

application/json
  1. response
created_at*string
Formatdate-time
note?string|null
ref*string
curl -X POST 'https://example.com/manage/global-refs' \  -H 'Content-Type: application/json' \  -d '{  "ref": "string"}'
{  "created_at": "2019-08-24T14:15:22Z",  "note": "string",  "ref": "string"}
DELETE
/manage/global-refs

Remove one normalized bare registry ref from this cell's global-routing set. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The ref is a query parameter because image refs contain / and :.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Query Parameters

ref*string

Response Body

Global ref removed

application/json
  1. response
ref*string
removed*boolean
curl -X DELETE 'https://example.com/manage/global-refs?ref=string'
{  "ref": "string",  "removed": true}
GET
/manage/global-regions

List the global-region groups. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The global-region catalog is served centrally: served on home and central cells (central is the write authority for this replicated tenancy metadata); a workload cell answers 501 MANAGEMENT_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Global-region catalog

application/json
  1. response
[index: integer]?

A cached Geo group or the Global root (Earth, ID earth): a broad placement selector expanded to one Edge descendant at create time. Geo groups are arbitrary abstract groups of Macros, not geographic constraints. The global_regions catalog and this DTO retain their technical names. id is the slug (shares the create-time region selector namespace with regions.id; a DB trigger forbids collisions).

curl -X GET 'https://example.com/manage/global-regions'
[  {    "id": "string",    "member_count": 0,    "name": "string",    "selectable": true  }]
POST
/manage/global-regions

Create a global-region group. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The global-region catalog is served centrally: served on home and central cells (central is the write authority for this replicated tenancy metadata); a workload cell answers 501 MANAGEMENT_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Request Body

application/json
  1. body
id*string
name*string

Response Body

Global-region group created

application/json
  1. response

A cached Geo group or the Global root (Earth, ID earth): a broad placement selector expanded to one Edge descendant at create time. Geo groups are arbitrary abstract groups of Macros, not geographic constraints. The global_regions catalog and this DTO retain their technical names. id is the slug (shares the create-time region selector namespace with regions.id; a DB trigger forbids collisions).

id*string
member_count?|

Number of eligible Edge descendants (for discovery via GET /global-regions).

Fleet discovery eligibility (issue #1867): tenant-visible descendants that are active, routable and opted into broad placement, INDEPENDENT of whether the process answering happens to serve them itself. It is inventory, not capacity, and not a promise that a create will be accepted. [Self::selectable] describes the answering API's local execution scope, not the capabilities of a separately configured router.

None means "this process cannot count them", not "zero". A central deployment owns the groups but no concrete region rows, so membership lives in the cells and is not locally computable; reporting 0 there told the operator every group was empty.

Range0 <= value
name*string
selectable?boolean

Whether this API cell serves an eligible member of the group.

Deliberately distinct from [Self::member_count]: the count is a fleet-wide inventory fact, this is an execution fact about the API answering the request. A control plane serving no regions reports positive counts with selectable: false. That does not forbid a client from using a separately configured shared workload router: that path requires a positive fleet count and its own supported routing configuration.

Global/Geo creates must use the shared router's binding/receipt protocol even when this flag is true. Capacity, class compatibility, artifact locality and admission still apply; this flag is not an execution grant.

curl -X POST 'https://example.com/manage/global-regions' \  -H 'Content-Type: application/json' \  -d '{  "id": "string",  "name": "string"}'
{  "id": "string",  "member_count": 0,  "name": "string",  "selectable": true}
PATCH
/manage/global-regions/{id}

Rename a global-region group. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The global-region catalog is served centrally: served on home and central cells (central is the write authority for this replicated tenancy metadata); a workload cell answers 501 MANAGEMENT_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

global-region id

Request Body

application/json
  1. body
name*string

Response Body

Global-region group renamed

application/json
  1. response

A cached Geo group or the Global root (Earth, ID earth): a broad placement selector expanded to one Edge descendant at create time. Geo groups are arbitrary abstract groups of Macros, not geographic constraints. The global_regions catalog and this DTO retain their technical names. id is the slug (shares the create-time region selector namespace with regions.id; a DB trigger forbids collisions).

id*string
member_count?|

Number of eligible Edge descendants (for discovery via GET /global-regions).

Fleet discovery eligibility (issue #1867): tenant-visible descendants that are active, routable and opted into broad placement, INDEPENDENT of whether the process answering happens to serve them itself. It is inventory, not capacity, and not a promise that a create will be accepted. [Self::selectable] describes the answering API's local execution scope, not the capabilities of a separately configured router.

None means "this process cannot count them", not "zero". A central deployment owns the groups but no concrete region rows, so membership lives in the cells and is not locally computable; reporting 0 there told the operator every group was empty.

Range0 <= value
name*string
selectable?boolean

Whether this API cell serves an eligible member of the group.

Deliberately distinct from [Self::member_count]: the count is a fleet-wide inventory fact, this is an execution fact about the API answering the request. A control plane serving no regions reports positive counts with selectable: false. That does not forbid a client from using a separately configured shared workload router: that path requires a positive fleet count and its own supported routing configuration.

Global/Geo creates must use the shared router's binding/receipt protocol even when this flag is true. Capacity, class compatibility, artifact locality and admission still apply; this flag is not an execution grant.

curl -X PATCH 'https://example.com/manage/global-regions/string' \  -H 'Content-Type: application/json' \  -d '{  "name": "string"}'
{  "id": "string",  "member_count": 0,  "name": "string",  "selectable": true}

GET /manage/groups

GET
/manage/groups

List the affinity-group routing state for the current cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Group membership, breaker state, and vslot routing are cell-local, so callers must query the cell whose fleet they want to inspect.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Affinity-group state for this cell

application/json
  1. response
enabled_regions*array<string>

Per-region routing flag (regions.affinity_enabled).

groups*array<>
curl -X GET 'https://example.com/manage/groups'
{  "enabled_regions": [    "string"  ],  "groups": [    {      "best_free_mem_mib": 0,      "breaker_open": true,      "breaker_reason": "string",      "cpu_arch": "string",      "cpu_type": "string",      "disk_class": "string",      "group_id": "string",      "healthy_members": 0,      "members": 0,      "network_class": "string",      "oldest_pending_ms": 0,      "pending": 0,      "recruits": [        "string"      ],      "region_id": "string",      "seq": 0,      "total_free_mem_mib": 0,      "vslots": 0    }  ]}

GET /manage/images

GET
/manage/images

List the registry and Dockerfile images known to this cell's layer index; capture and Windows images are not listed. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Image routing flags and indexed layer totals are cell-local because the manifest and layer index describe the current cell's storage.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Images and indexed layer totals for this cell

application/json
  1. response
images*array<>
curl -X GET 'https://example.com/manage/images'
{  "images": [    {      "global": true,      "id": "string",      "indexed_bytes": 0,      "indexed_layers": 0,      "layer_count": 0,      "manifest_name": "string",      "name": "string",      "status": "string"    }  ]}
PATCH
/manage/images/{id}

Update operator-only image flags on the owning cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The global flag changes only routing within the image's own cell; it does not copy artifacts, mutate workload-plane JSON fields, or make the image visible to any other project. Only setting global: true is restricted to registry and dockerfile images; global: false is accepted on any image to clear a stale flag.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

image id (region-tagged external id or raw UUID)

Request Body

application/json
  1. body
global?boolean|null

Response Body

Image flags updated

application/json
  1. response
global*boolean
id*string
name*string
status*string
curl -X PATCH 'https://example.com/manage/images/string' \  -H 'Content-Type: application/json' \  -d '{}'
{  "global": true,  "id": "string",  "name": "string",  "status": "string"}
GET
/manage/images/{id}/layers

List the indexed layer stack for one image on the owning cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Layer sharing and reclaimability are cell-local because the manifest and layer index describe the current cell's storage.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

image id (region-tagged external id or raw UUID)

Response Body

Image layer stack

application/json
  1. response
exclusive_bytes*integer
Formatint64
image_id*string
layer_count?|
Range0 <= value
layers*array<>
manifest_name?string|null
name*string
status*string
total_bytes*integer
Formatint64
curl -X GET 'https://example.com/manage/images/string/layers'
{  "exclusive_bytes": 0,  "image_id": "string",  "layer_count": 0,  "layers": [    {      "bytes": 0,      "diff_id": "string",      "erofs_path": "string",      "exclusive": true,      "position": 0,      "shared_with": 0    }  ],  "manifest_name": "string",  "name": "string",  "status": "string",  "total_bytes": 0}
POST
/manage/layers/backfill

Backfill missing manifest-layer index rows on this cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The work is cell-local because manifests are read through this cell's own runners.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Query Parameters

limit?integer
Formatint64

Response Body

Backfill progress summary

application/json
  1. response
considered*integer
Range0 <= value
failed*integer
Range0 <= value
indexed*integer
Range0 <= value
layers_written*integer
Range0 <= value
more*boolean
curl -X POST 'https://example.com/manage/layers/backfill'
{  "considered": 0,  "failed": 0,  "indexed": 0,  "layers_written": 0,  "more": true}
GET
/manage/layers/{diff_id}/dependents

List every artifact on this cell that still references one diff-id. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The answer is cell-local because layer reachability is determined from this cell's manifest index and live VM rows.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

diff_id*string

layer diff-id, with or without the sha256: prefix

Response Body

Layer dependents on this cell

application/json
  1. response
bytes*integer
Formatint64
dependent_count*integer
Range0 <= value
diff_id*string
function_versions*array<>
images*array<>
manifest_count*integer
Range0 <= value
manifests*array<string>
reclaimable*boolean
snapshots*array<>
vms*array<>
curl -X GET 'https://example.com/manage/layers/string/dependents'
{  "bytes": 0,  "dependent_count": 0,  "diff_id": "string",  "function_versions": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "manifest_name": "string"    }  ],  "images": [    {      "id": "string",      "name": "string",      "status": "string"    }  ],  "manifest_count": 0,  "manifests": [    "string"  ],  "reclaimable": true,  "snapshots": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "manifest_name": "string",      "name": "string",      "status": "string"    }  ],  "vms": [    {      "id": "string",      "manifest_name": "string",      "status": "string"    }  ]}
GET
/manage/macro-regions

List the imported Macro regions (one per workload cell). This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The Macro catalog is served by whichever deployment mounts the management plane from the replicated topology metadata: Home in a fused deployment, Central in a split deployment; a workload cell answers 501 MANAGEMENT_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Macro-region catalog

application/json
  1. response
[index: integer]?

A cached macro-region row (PLAN-REGION-HIERARCHY.md): the public selector for exactly ONE workload cell, sitting between a Geo group and the Edge regions that cell serves.

cell_id is the deployment's stable cell identity — the key the request router's directory is indexed by — not a URL and not the serving process's deployment role. Both it and id are immutable: re-pointing either would move future placement to a different database.

curl -X GET 'https://example.com/manage/macro-regions'
[  {    "cell_id": "string",    "eligible_local_region_count": 0,    "global_region_id": "string",    "id": "string",    "name": "string",    "selectable": true  }]
PATCH
/manage/macro-regions/{id}

Rename one Macro region or move it under a different Geo region. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Macro regions are imported from deployment inventory, so only the display name and Geo parent are editable here; the Macro id and its bound cell remain immutable.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

Macro-region id

Request Body

application/json
  1. body

A Macro region's editable topology: its display name and its Geo parent (PLAN-REGION-HIERARCHY.md). id and cell_id are deployment-owned and immutable, so they are absent here by design.

At least one field must be present — an empty body is a no-op an operator would read as a successful edit.

Both fields are Option<Option<_>> so ABSENT and EXPLICIT NULL stay distinguishable. Neither column is nullable: macro_regions.name and macro_regions.global_region_id are NOT NULL, and a Macro with no Geo parent would strand every one of its Edge regions. A plain Option collapsed {"name": null, "global_region_id": "eu"} into "name omitted" and silently applied half the request, which reads to the caller as a rejected field that was actually accepted-and-ignored.

global_region_id?|

New Geo parent id. Omit to keep the current value. An explicit null is rejected so the API can name the bad field instead of silently treating it as absent.

name?|

New Macro display name. Omit to keep the current value. An explicit null is rejected so the API can name the bad field instead of silently treating it as absent.

Response Body

Macro region updated

application/json
  1. response

A cached macro-region row (PLAN-REGION-HIERARCHY.md): the public selector for exactly ONE workload cell, sitting between a Geo group and the Edge regions that cell serves.

cell_id is the deployment's stable cell identity — the key the request router's directory is indexed by — not a URL and not the serving process's deployment role. Both it and id are immutable: re-pointing either would move future placement to a different database.

cell_id*string
eligible_local_region_count?|

Edge regions beneath this Macro that a broad selector may place in: active, routable and opted in — fleet discovery eligibility, not scoped to what the answering process serves (issue #1867). None means this process cannot count them — a central deployment owns the topology but no local rows, so reporting 0 would claim every cell is empty.

Computed from the local rows loaded in the same snapshot, never selected — which is why the DTO is separate from MacroRegionRow.

Range0 <= value
global_region_id*string

The Geo group this Macro hangs off. Groups are arbitrary/abstract; names such as US or EU do not impose a geographic constraint. Never earth: that ID names the Global root. The field retains its stored name.

id*string
name*string
selectable?boolean

Whether this API cell serves an eligible member of this Macro — the same local execution fact as [GlobalRegionInfo::selectable], and deliberately distinct from the inventory count above (issue #1867).

Filled per read rather than cached with the row: it depends on this process's own served set, which is not a property of the catalog.

curl -X PATCH 'https://example.com/manage/macro-regions/string' \  -H 'Content-Type: application/json' \  -d '{}'
{  "cell_id": "string",  "eligible_local_region_count": 0,  "global_region_id": "string",  "id": "string",  "name": "string",  "selectable": true}
GET
/manage/manifests/{name}/layers

List the indexed layer stack for one manifest name on this cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The answer is cell-local because manifest indexing happens against this cell's storage.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

name*string

manifest name

Response Body

Manifest layer stack

application/json
  1. response
layer_count*integer
Range0 <= value
layers*array<>
manifest_name*string
total_bytes*integer
Formatint64
curl -X GET 'https://example.com/manage/manifests/string/layers'
{  "layer_count": 0,  "layers": [    {      "bytes": 0,      "diff_id": "string",      "erofs_path": "string",      "exclusive": true,      "position": 0,      "shared_with": 0    }  ],  "manifest_name": "string",  "total_bytes": 0}
GET
/manage/platform-images

List this cell's platform images: operator-published Linux images every organization and project can create sandboxes from, with the cell's platform default per class. Requires the platform-operator credential: an OIDC JWT for a configured platform admin, or the internal token. Served on home and workload cells, each answering for its own images; a central deployment answers 501 WORKLOAD_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Platform images and the cell's defaults

application/json
  1. response

GET /manage/platform-images body.

default*

The cell's platform default per class: the image's img_… id, or null.

images*array<>
curl -X GET 'https://example.com/manage/platform-images'
{  "default": {    "linux": "string"  },  "images": [    {      "available_in": [        "string"      ],      "class": "string",      "created_at": "2019-08-24T14:15:22Z",      "default": true,      "deprecated": true,      "description": "string",      "error": "string",      "id": "string",      "name": "string",      "ref": "string",      "region": "string",      "status": "string"    }  ]}
POST
/manage/platform-images

Publish a platform image on this cell: import a public registry ref, pinned by digest, under a name every project can create sandboxes from. A project's own image of the same name takes precedence for that project. Idempotent per name and ref: publishing an existing name with the same ref answers 200 and enqueues nothing, unless its import failed, which retries it. Platform images are immutable; a new ref needs a new name. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Request Body

application/json
  1. body

POST /manage/platform-images body.

description?|

At most 256 characters.

name*string

Image name tenants create from. A label ([A-Za-z0-9._-], no reserved prefix) that does not start with img_.

ref*string

Registry ref pinned by digest: [host[:port]/]path[:tag]@sha256:<64 hex>. Public registries only.

Response Body

The name already exists with this ref; nothing enqueued, and the existing row (its deprecation and description included) is returned unchanged — use PATCH to change it

application/json
  1. response

{image} — the platform image after a write.

image*

One operator-published platform image, as /manage/platform-images returns it.

curl -X POST 'https://example.com/manage/platform-images' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "ref": "string"}'
{  "image": {    "available_in": [      "string"    ],    "class": "string",    "created_at": "2019-08-24T14:15:22Z",    "default": true,    "deprecated": true,    "description": "string",    "error": "string",    "id": "string",    "name": "string",    "ref": "string",    "region": "string",    "status": "string"  }}
DELETE
/manage/platform-images/default

Clear the cell's platform default image for a class (idempotent). A POST /sandboxes without image then answers 400 DEFAULT_IMAGE_NOT_CONFIGURED. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Query Parameters

class?string

The class whose default to clear. Only linux; absent means linux.

Response Body

No default is set for the class

curl -X DELETE 'https://example.com/manage/platform-images/default'
Empty
PUT
/manage/platform-images/default

Set the cell's platform default image for a class: the image a POST /sandboxes without image boots. Only linux. The image must be a ready, non-deprecated Linux platform image. Takes effect on the next create. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Request Body

application/json
  1. body

PUT /manage/platform-images/default body.

class*string

The sandbox class the default serves. Only linux.

image*string

The platform image's name or img_… id.

Response Body

The new default

application/json
  1. response

PUT /manage/platform-images/default response.

class*string
image*

One operator-published platform image, as /manage/platform-images returns it.

curl -X PUT 'https://example.com/manage/platform-images/default' \  -H 'Content-Type: application/json' \  -d '{  "class": "string",  "image": "string"}'
{  "class": "string",  "image": {    "available_in": [      "string"    ],    "class": "string",    "created_at": "2019-08-24T14:15:22Z",    "default": true,    "deprecated": true,    "description": "string",    "error": "string",    "id": "string",    "name": "string",    "ref": "string",    "region": "string",    "status": "string"  }}
PATCH
/manage/platform-images/{id}

Deprecate or restore a platform image, or change its description. A deprecated image takes no new creates by name and is not listed to tenants; sandboxes that already use it keep booting, and its img_… id still resolves. The current default cannot be deprecated. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

Platform image id (img_…)

Request Body

application/json
  1. body

PATCH /manage/platform-images/{id} body. Absent fields are unchanged.

deprecated?|

true hides the image from new creates by name and from tenant listings; false restores it. The current default cannot be deprecated.

description?|

The new description (at most 256 characters); null clears it.

Response Body

The updated platform image

application/json
  1. response

{image} — the platform image after a write.

image*

One operator-published platform image, as /manage/platform-images returns it.

curl -X PATCH 'https://example.com/manage/platform-images/string' \  -H 'Content-Type: application/json' \  -d '{}'
{  "image": {    "available_in": [      "string"    ],    "class": "string",    "created_at": "2019-08-24T14:15:22Z",    "default": true,    "deprecated": true,    "description": "string",    "error": "string",    "id": "string",    "name": "string",    "ref": "string",    "region": "string",    "status": "string"  }}
DELETE
/manage/platform-images/{id}

Delete a platform image. Refused while any sandbox references it or while it is the platform default; deprecate it first to stop new creates. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

Platform image id (img_…)

Response Body

Platform image deleted

curl -X DELETE 'https://example.com/manage/platform-images/string'
Empty

GET /manage/regions

GET
/manage/regions

List the concrete region catalog visible on this cell for operator routing. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Workload and home cells serve the concrete regions they mount. A standalone central deployment does not author a concrete-region catalog: it keeps this GET only as the cell router's authenticated discovery oracle, returning the empty response the router replaces with its own directory.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Region catalog for operator discovery

application/json
  1. response
[index: integer]?

A cached region row. id is the slug (also the Daytona target and the runner's region identifier).

curl -X GET 'https://example.com/manage/regions'
[  {    "api_base_url": "string",    "auto_placement_enabled": true,    "gpu_runners_allow_linux": true,    "id": "string",    "is_default": true,    "macro_region_id": "string",    "name": "string",    "preview_domain": "string",    "status": "string",    "toolbox_proxy_url": "string"  }]
GET
/manage/registries/global

List the global registry credentials: credentials an operator stored for image pulls by every organization, each scoped to a registry host and a repository prefix. Passwords are never returned. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token. Served on home and workload cells (each reads its own rows, where its pulls resolve); a central deployment answers 501 WORKLOAD_PLANE_ELSEWHERE.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Global registry credential metadata (never passwords)

application/json
  1. response

GET /manage/registries/global body.

registries*array<>
curl -X GET 'https://example.com/manage/registries/global'
{  "registries": [    {      "created_at": "2019-08-24T14:15:22Z",      "description": "string",      "host": "string",      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "import_only": true,      "kind": "string",      "repository_prefix": "string",      "updated_at": "2019-08-24T14:15:22Z",      "username": "string"    }  ]}
PUT
/manage/registries/global

Create or replace the global registry credential for a registry host and repository prefix. Every organization's pulls of an image under that prefix authenticate with it; an empty prefix covers every repository on the host. A prefixed credential takes precedence over a project's own credential for the host; a host-wide one does not. With import_only: true the credential serves only pulls of images the platform imported from Daytona v1 (the archived-sandbox import), never an organization's own pull of the same image ref — set it for a v1 registry, which holds every organization's backups. import_only absent keeps the stored value on a replace (false on a create). The password is write-only; an empty password keeps the stored one when the kind and username are unchanged. For kind: ecr with a new secret, the keys must belong to the AWS account in the host. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Request Body

application/json
  1. body

PUT /manage/registries/global body: create or replace the credential for (host, repository_prefix). The password is write-only.

description?string|null
host*string

Registry host (host[:port], no scheme/path).

import_only?boolean

Import-only (v1 migration): use the credential only for pulls of images the platform imported from Daytona v1 (archived-sandbox imports), never for an organization's own pull of the same ref. Set it for a Daytona v1 registry, which holds every organization's backups. Absent on a create = false; absent on a replace KEEPS the stored value, so a client that predates the field (a script, a stale superadmin bundle) can never silently turn an import-only row into an ordinary global credential every organization pulls with.

kind?string

Auth kind: one of basic, ghcr, gcr, ecr.

Default"basic"
password?string

Password, token, service-account JSON or AWS secret access key (max 64 KiB). Write-only. Empty keeps the stored password, allowed only when the row exists and its kind and username are unchanged.

repository_prefix?string

Repository prefix (/-separated lowercase segments); empty or absent covers every repository on the host.

username*string

Response Body

Credential replaced

application/json
  1. response

One global credential's metadata. Never the password.

created_at*string
Formatdate-time
description?string|null
host*string

Normalized registry host (Docker Hub aliases collapse to index.docker.io).

id*string
Formatuuid
import_only*boolean

Import-only (v1 migration): the credential serves only pulls of images the platform imported from Daytona v1, never a tenant's own pull of the same ref.

kind*string

Auth kind: basic, ghcr, gcr or ecr.

repository_prefix*string

Repository prefix the credential is scoped to; empty covers every repository on the host.

updated_at*string
Formatdate-time
username*string
curl -X PUT 'https://example.com/manage/registries/global' \  -H 'Content-Type: application/json' \  -d '{  "host": "string",  "username": "string"}'
{  "created_at": "2019-08-24T14:15:22Z",  "description": "string",  "host": "string",  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "import_only": true,  "kind": "string",  "repository_prefix": "string",  "updated_at": "2019-08-24T14:15:22Z",  "username": "string"}
DELETE
/manage/registries/global/{id}

Delete a global registry credential (idempotent). New pulls stop using it; images already cached with it stay bootable for existing sandboxes. Requires the platform-operator credential (an OIDC JWT for a configured platform admin, or the internal token).

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

Global registry credential id

Formatuuid

Response Body

Credential removed (or none existed)

curl -X DELETE 'https://example.com/manage/registries/global/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Empty

GET /manage/runners

GET
/manage/runners

List the runner fleet visible to the current cell. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Runner liveness and capacity are cell-local, so callers must query the cell whose fleet they want to inspect; a standalone central deployment has no fleet and answers 501 workload_plane_elsewhere with the workload API URL to use instead.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Response Body

Runner fleet for this cell

application/json
  1. response
runners*array<>
curl -X GET 'https://example.com/manage/runners'
{  "runners": [    {      "admin_state": "string",      "build_sha": "string",      "build_time": "2019-08-24T14:15:22Z",      "capacity_stale": true,      "cpu_arch": "string",      "cpu_serves": [        "string"      ],      "cpu_type": "string",      "disk_class": "string",      "disk_serves": [        "string"      ],      "id": "string",      "last_seen_at": "2019-08-24T14:15:22Z",      "network_class": "string",      "network_serves": [        "string"      ],      "not_consuming": true,      "orphans": 0,      "public_ip": "string",      "region": "string",      "runner_proxy_ip": "string",      "runner_proxy_port": 0,      "sandbox_network_mode": "string",      "sandboxes": 0,      "self_cordoned": true,      "status": "string",      "usage": {},      "usage_source": "string",      "version": "string"    }  ]}

GET /manage/runners/{id}

GET
/manage/runners/{id}

Get one runner and every sandbox currently recorded on it. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. Runner state is cell-local, so the request must go to the cell that owns the runner.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Response Body

Runner detail for this cell

application/json
  1. response
admin_state*string
build_sha?|

Full 40-hex commit the runner was built from (unknown unstamped). Null until the runner reports it.

build_time?|

When the runner was built. Null until reported, or when the reported value is not RFC 3339 (an unstamped build reports unknown).

Formatdate-time
cpu_arch*string
cpu_serves?array<string>

Registry slugs the runner serves as tier fallback, as reported on its last register/heartbeat (PLAN-CPU-CATALOG-FROM-RUNNERS.md). Empty on a flag-off or old runner. The API always emits it; it is not required in the schema so generated clients decode a pre-upgrade cell's response, where the key is absent, as unset (None/undefined) rather than failing.

cpu_type?string|null
disk_class?string|null
disk_serves*array<string>
id*string
last_seen_at*string
Formatdate-time
network_class?string|null
network_serves*array<string>
not_consuming*boolean
public_ip?string|null
runner_proxy_ip?string|null
runner_proxy_port?|
Formatint32
sandbox_count*integer
Range0 <= value
sandbox_network_mode?string
sandboxes*array<>
self_cordoned*boolean
status*string
usage*

Runner-reported capacity/usage document. The runner owns this JSON shape.

usage_source*string
version?|

Platform version the runner binary was stamped with (PLAN-BUILD-IDENTITY.md D9; 0.0.0-dev on an unstamped build). Null until the runner reports it.

curl -X GET 'https://example.com/manage/runners/string'
{  "admin_state": "string",  "build_sha": "string",  "build_time": "2019-08-24T14:15:22Z",  "cpu_arch": "string",  "cpu_serves": [    "string"  ],  "cpu_type": "string",  "disk_class": "string",  "disk_serves": [    "string"  ],  "id": "string",  "last_seen_at": "2019-08-24T14:15:22Z",  "network_class": "string",  "network_serves": [    "string"  ],  "not_consuming": true,  "public_ip": "string",  "runner_proxy_ip": "string",  "runner_proxy_port": 0,  "sandbox_count": 0,  "sandbox_network_mode": "string",  "sandboxes": [    {      "cpu": 0,      "created_at": "2019-08-24T14:15:22Z",      "ephemeral": true,      "forked": true,      "id": "string",      "image": null,      "image_ref": "string",      "mem_max_mib": 0,      "mem_mib": 0,      "name": "string",      "persistent": true,      "scratch_max_mib": 0,      "scratch_mib": 0,      "snapshot": null,      "spot": true,      "status": "string",      "usage": null,      "vcpus": 0,      "vcpus_max": 0,      "vm_ip": "string",      "volumes": [        {          "mount_path": "string",          "subpath": "string",          "volume_id": "f17547b0-76cd-4153-92b9-a7d38dac0aba"        }      ]    }  ],  "self_cordoned": true,  "status": "string",  "usage": {},  "usage_source": "string",  "version": "string"}
POST
/manage/runners/{id}/cordon

Cordon a runner so it stops accepting new work. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The change applies only on the runner's own cell, where its heartbeats and NATS control channel live.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Response Body

Runner cordoned

application/json
  1. response
admin_state*string
id*string
runner_reached*boolean
curl -X POST 'https://example.com/manage/runners/string/cordon'
{  "admin_state": "string",  "id": "string",  "runner_reached": true}
GET
/manage/runners/{id}/nats-credentials

List one runner's NATS credentials (live and revoked; never the token or its hash). Requires an operator's own login: the internal token is refused on this route.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Response Body

The runner's credentials

application/json
  1. response

GET …/nats-credentials body: the runner's credentials, live and revoked.

credentials*array<>
curl -X GET 'https://example.com/manage/runners/string/nats-credentials'
{  "credentials": [    {      "created_at": "2019-08-24T14:15:22Z",      "expires_at": "2019-08-24T14:15:22Z",      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "last_used_at": "2019-08-24T14:15:22Z",      "name": "string",      "revoked_at": "2019-08-24T14:15:22Z",      "runner_id": "string"    }  ]}
POST
/manage/runners/{id}/nats-credentials

Mint a NATS credential for one runner (PLAN-NATS-CLIENT-IDENTITY.md D4/D14/D15). The token is returned once and only its hash is stored; the runner presents it to the api's auth callout and receives a user JWT scoped to its own subjects. Requires an operator's own login (OIDC JWT of a configured platform admin): the internal token is refused on this route, automation mints with rlp-api nats-runner-credential mint. An empty body means the configured default lifetime; expires_at and no_expiry are mutually exclusive, and an unknown field is a 400.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Request Body

Optional mint options; an empty body is accepted

application/json
  1. body

deny_unknown_fields: a mistyped option (expire_at, expires) must fail loudly instead of minting a credential without the bound the operator asked for.

expires_at?|

Absolute expiry; must be in the future. Absent/null is the configured default lifetime (30 days unless the operator changed it), not "never".

Formatdate-time
name?|

Operator-facing label for the credential (free text).

no_expiry?boolean

Explicitly unbounded. expires_at: null (or absent) is NOT "never": it is the configured default lifetime.

Response Body

Credential minted; token is shown only in this response

application/json
  1. response

A freshly minted credential. The token appears here and nowhere else — including Debug, which redacts it (a formatted mint result in a log or a panic message must not be a reusable credential).

created_at*string
Formatdate-time
expires_at?|

null for an explicitly unbounded credential (no_expiry).

Formatdate-time
id*string
Formatuuid
runner_id*string
token*string

The credential itself (rlpr_…), shown ONCE: only its hash is stored.

curl -X POST 'https://example.com/manage/runners/string/nats-credentials' \  -H 'Content-Type: application/json' \  -d '{}'
{  "created_at": "2019-08-24T14:15:22Z",  "expires_at": "2019-08-24T14:15:22Z",  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "runner_id": "string",  "token": "string"}
DELETE
/manage/runners/{id}/nats-credentials

Revoke EVERY live NATS credential of a runner — the decommission step. 200 with the count, also when it is zero. Requires an operator's own login: the internal token is refused on this route.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Response Body

Live credentials revoked (count may be zero)

application/json
  1. response

DELETE …/nats-credentials body: how many live credentials were revoked (zero is still a 200 — the end state holds either way).

ok*boolean
revoked*integer
Range0 <= value
runner_id*string
curl -X DELETE 'https://example.com/manage/runners/string/nats-credentials'
{  "ok": true,  "revoked": 0,  "runner_id": "string"}
DELETE
/manage/runners/{id}/nats-credentials/{cred_id}

Revoke one NATS credential of a runner. A connection authenticated with it is cut the next time the callout or the bus re-evaluates it. Requires an operator's own login: the internal token is refused on this route.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

cred_id*string

credential id

Formatuuid

Response Body

Credential revoked

application/json
  1. response

DELETE …/nats-credentials/{cred_id} body.

id*string
Formatuuid
ok*boolean
revoked*boolean
curl -X DELETE 'https://example.com/manage/runners/string/nats-credentials/497f6eca-6276-4993-bfeb-53cbbbba6f08'
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "ok": true,  "revoked": true}
POST
/manage/runners/{id}/uncordon

Return a runner to the active scheduling state. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The change applies only on the runner's own cell, where its heartbeats and NATS control channel live.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Response Body

Runner uncordoned

application/json
  1. response
admin_state*string
id*string
runner_reached*boolean
curl -X POST 'https://example.com/manage/runners/string/uncordon'
{  "admin_state": "string",  "id": "string",  "runner_reached": true}
GET
/manage/runners/{id}/usage

Per-runner billed usage over time (hourly or daily), proxied verbatim from rlp-billing's ClickHouse export of delivered billing events. This route requires the platform-operator credential: either an OIDC JWT for a configured platform admin or the internal token; organization roles and org API keys are not accepted. The runner must exist on the addressed cell.

Authorization

operator
headerAuthorizationBearer <token>

Platform-operator credential for /manage/*: on the home/central cell this can be either an OIDC JWT of a configured platform admin or the shared internal token; workload cells admit the shared internal token only. This is distinct from organization roles, project API keys, and org API keys.

Path Parameters

id*string

runner id

Query Parameters

from?string

RFC3339 window start. Default: to − 7 days. An unparseable value takes the default, as on the sandbox usage routes.

to?string

RFC3339 window end, exclusive. Default: now. Unparseable => default.

resolution?string

"h" (hourly, default) or "d" (daily). Anything else is a 400.

Value in"h""d"

Response Body

Usage series as served by rlp-billing (passthrough body)

application/json
  1. response
curl -X GET 'https://example.com/manage/runners/string/usage'
{}