Create sandbox
Endpoint:POST /api/v1/sandboxes
Request body schema
Fields accepted in the JSON body when creating a sandbox:name(string, required): Unique sandbox name in the namespaceimage(string, required): Container image, e.g.alpine:latestnamespace(string, defaultdefault): Kubernetes namespaceenv_file(string | null): Path (on API host) to.envfile to inject as Secretbefore_script(string, default empty): Shell commands to run before the container is marked Readylimits(object): Resource limits/requests; keys supported:cpu,memory,ephemeral-storageegress_whitelist(string[] | [] | null): See Egress section belowpod_non_root(boolean, default false): Run pod as non-root (UID/GID/FSGroup 65532)container_non_root(boolean, default false): Run container as non-root (UID 65532)cap_drop(string[] | null): List of capabilities to drop; default policy isALLcap_add(string[] | null): List of capabilities to add back
Responses
201 Createdwith Location header to the created resource:
400 BadRequestwhen validation fails (invalid limits, bad env file, already exists, etc.)
List sandboxes
Endpoint:GET /api/v1/sandboxes
string
default:"default"
Namespace
Get sandbox
Endpoint:GET /api/v1/sandboxes/{name}
string
required
Sandbox name
string
default:"default"
Namespace
Delete sandbox
Endpoint:DELETE /api/v1/sandboxes/{name}
string
required
Sandbox name
string
default:"default"
Namespace
Delete all sandboxes
Endpoint:DELETE /api/v1/sandboxes
string
default:"default"
Namespace
Get logs
Endpoint:GET /api/v1/sandboxes/{name}/logs
Returns a snapshot of the pod’s container logs. Live follow streaming
isn’t shipped yet — use k7 --core logs --follow ... on a cluster node
for tail-and-follow until API streaming lands.
string
required
Sandbox name
string
default:"default"
Namespace
string
default:"sandbox"
Container name inside the pod
int
default:"200"
Number of trailing lines to return
int
default:"0"
Only return entries newer than N seconds (0 = no filter)
200 OKwith{"data": {"logs": "..."}}on success.404 NotFoundwhen no pod matches the sandbox name in the namespace.
Pause sandbox
Endpoint:POST /api/v1/sandboxes/{name}/pause
Scales the sandbox Deployment to 0 and optionally creates a Longhorn
VolumeSnapshot of its root PVC for crash-consistent state capture
(kata-qemu-longhorn only).
string
required
Sandbox name
snapshot is set, the API snapshots the sandbox’s root PVC under
that name using the longhorn VolumeSnapshotClass. The PVC name is
derived server-side (<sandbox>-root-lh for kata-qemu-longhorn) — there is
no client-side flag for it. Without snapshot the endpoint only scales
to 0 without taking a snapshot.
Resume sandbox
Endpoint:POST /api/v1/sandboxes/{name}/resume
Scales the Deployment back to 1.
string
required
Sandbox name
Fork sandbox
Endpoint:POST /api/v1/sandboxes/{name}/fork
Clones a kata-qemu-longhorn sandbox into a new name with its own disk derived
from a fresh VolumeSnapshot of the source’s root PVC. The request blocks
until the new PVC is bound (typically ~45 s today). Fork is kata-qemu-longhorn
only — fork on a kata-firecracker-devmapper sandbox returns 400.
string
required
Source sandbox name
new_name is required. snapshot is an optional name for the
fork-time intermediate snapshot; if omitted, k7 picks one.
201 CreatedwithLocation: /api/v1/sandboxes/{new_name}?namespace={namespace}400 BadRequestwhennew_nameis missing, or the source backend doesn’t support fork404 NotFoundwhen the source Deployment or its root PVC is missing409 Conflictwhennew_namealready exists in the namespace
See also
- API Security & networking:
/api/security
