POST /v1/sandboxes:createFromFile starts a sandbox from an uploaded file. You send a file type and the file bytes. The sandbox gateway translates the document into a sandbox spec and runs the same create path as POST /v1/sandboxes.
Docker Compose (SANDBOX_FILE_TYPE_COMPOSE) is the only accepted file type. Every service in the file becomes a container in a single sandbox, and one service you name becomes the sandbox primary. The gateway doesn’t store the file bytes. GET /v1/sandboxes/{sandboxId} returns the translated spec.
This guide covers Compose files that use prebuilt, pullable images with platform-controlled containers (CONTROL_PLATFORM, the default). Before you import an existing project, read Compose support.
Before you begin
Choose a credential from Choose and get credentials. Run the commands from one tab in Bash, then run the requests in the same shell. For serverless placement, use a credential for an account with serverless sandbox access. CoreWeave Kubernetes Service (CKS) placement requires a CoreWeave token with the Sandbox User role and a configured runner in the same organization.- Forge API key
- CoreWeave API access token
Replace To use a Forge team other than your default, replace
WANDB_API_KEY_VALUE with your API key:WANDB_ENTITY with the team name and append -H "x-entity-id: WANDB_ENTITY" to the array.https://api.cwsandbox.com with serverless placement and the selected authentication header. The runner administration API uses https://api.coreweave.com and requires a CoreWeave token with the Sandbox Admin role.
Request fields
The following fields configure the workflow in this guide.
The request also accepts
mode, maxLifetimeSeconds, tags, network, objectStorageAccess, annotations, runnerIds, and requestId, with the same meaning as on POST /v1/sandboxes. networkIds returns UNIMPLEMENTED.
For CKS placement, choose the CoreWeave token tab and enable a runner. Change mode to "SANDBOX_MODE_CKS" in the jq object in the creation example. To target a specific runner, also add runnerIds: ["RUNNER_ID"], replacing the placeholder with its ID. For the object storage prerequisites, see Grant sandboxes access to AI Object Storage.
The endpoint also accepts displayName, control, image-pull credentials, and build options such as buildContexts, buildContextObjects, and builderSizes. Support depends on deployment enablement and the selected control mode. With CONTROL_PLATFORM, imagePullCredentials can authenticate pulls of prebuilt images, but can’t be combined with services that still need a build. See the request reference for field details and restrictions.
Create the sandbox
Write a Compose file:compose.yaml
contents base64-encoded:
Create a sandbox from compose.yaml
STATE_CREATING. Poll its sandboxId until it reaches STATE_RUNNING or a terminal state. Replace SANDBOX_ID_VALUE with that ID:
Poll the sandbox
main marked primary, and HELPER_HOST still set to helper. Inside the sandbox, helper resolves to 127.0.0.1.
To retry a create safely, send requestId. The same requestId with the same declared inputs returns the existing sandbox. The same requestId with different bytes, including a whitespace-only change, returns ALREADY_EXISTS with reason CWSANDBOX_REQUEST_ID_CONFLICT.
Create a sandbox from TypeScript
The TypeScript software development kit (SDK) 1.0.0 supports Compose throughrunFromFile() and withSandboxFromFile(). Complete TypeScript client setup first and save the sandbox-client.mts file beside this script.
Use the compose.yaml file from Create the sandbox. withSandboxFromFile() waits for the sandbox to be ready, runs the callback, and stops the sandbox after the callback returns or throws:
compose.mts
Compose sandbox ready and stops the sandbox.
A string argument is always a file path. To supply inline YAML, pass UTF-8 bytes with new TextEncoder().encode(yaml). The SDK sends bytes without reformatting them. Keep the file within the API’s 256 KiB limit.
In version 1.0.0, primaryService is required and must name a service in the file. defaultResources supplies CPU and memory per service, not for the whole project. It doesn’t support GPU resources. Use imageOverrides to supply pullable images for services that would otherwise need a build. The Compose support restrictions also apply to the SDK.
For manual lifecycle management, runFromFile() returns a sandbox handle. Stop it in a finally block. For both method signatures, see SandboxClient. For the supported options, see SandboxRunFromFileOptions.
Compose support
All services share one Pod and one network namespace. Service names resolve to127.0.0.1, so values such as HELPER_HOST: helper and API_BASE: http://main:8080 work without rewriting the file. The sandbox has no per-service IP addresses, bridge networks, or replicas.
Lifecycle depends on the control mode. With CONTROL_PLATFORM, the primary container follows
Main command lifetime:
A successful exit completes the sandbox, and a nonzero exit can trigger automatic restarts.
With CONTROL_CONTAINER_ENGINE, the sandbox doesn’t end solely because a service exits. An engine
failure fails the sandbox without a platform restart or retry.
With CONTROL_PLATFORM, the following behavior differs from Docker Compose:
- Startup is serial: Every non-primary service starts one after another, before the primary. Size
maxLifetimeSecondsfor that. A service that never becomes ready leaves the sandbox inSTATE_CREATING. RUNNINGtracks the primary only: A helper that crashes after start doesn’t fail the sandbox.healthcheckbecomes an exec-only startup probe:testmust be a string,CMD,CMD-SHELL, orNONE, and durations must be whole seconds. When the probe exhausts its retries, the container is stopped rather than marked unhealthy.- Ports stay in the Pod:
exposeandportsdeclare listen ports, but nothing is published externally. - Use prebuilt images for this workflow: Supply a pullable image for every service through
image:in the file or an entry inimageOverrides. Deployments with Compose builds enabled can build services that needbuild:. Without that support, these requests returnUNIMPLEMENTED. For failed build logs, see Read failed Compose build logs. commandandentrypointfollow Docker’s shell and exec forms: Omit them to use the image defaults. Explicitnulland[]are rejected.- GPUs are primary-only, through
deploy.resources.reservations.deviceswith thegpucapability and a positive integer count. - Names must be DNS-1123 labels (
my-app, notMy_App), and can’t use the reservedcw-object-store-agent,cw-object-store-agent-restore, ordns-egressprefixes.
Unsupported keys
The document must be self-contained: the gateway doesn’t read your disk and doesn’t expand your environment. Unrecognized keys are rejected with the offending field path rather than ignored.
The gateway ignores
version, project name, labels, and x-* extension keys. Don’t rely on labels reaching the sandbox.
Common errors
Field violations arrive asBadRequest details naming the path and the limit. They don’t quote your document.
See also
For related guidance, see the following pages:- Get started: create your first sandbox from a spec.
- Runner administration API: manage runners with a CoreWeave API access token and the Sandbox Admin role.
- Sandbox environment variables: what the platform injects into every container.