---
title: "Start a background process: a server, a watcher, a long build, an interactive program."
method: POST
path: "/v1/sandboxes/{id}/processes"
tags: ["commands"]
---

# Start a background process: a server, a watcher, a long build, an interactive program.

`POST /v1/sandboxes/{id}/processes`

## Request

- Base URL: `https://api.withruntime.com`
- URL: `https://api.withruntime.com/v1/sandboxes/{id}/processes`
- Auth: HTTP bearer

Returns at once with the process. stdinMode 'pipe' keeps standard input open for :write; pty gives it a terminal (and implies input). At most 16 run at once per sandbox.

## Path parameters

- `id` string, required: Resource identifier (UUID).

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `command` string: A shell command, run as `bash -c "<command>"`: pipes, &&, redirection and globs work.
  - `argv` string[]: Or the program and its arguments, run without a shell.
  - `cwd` string: Working directory. Default /workspace.
  - `env` object: Environment for this command, merged over the sandbox's. Put secrets here, never in the command line: env is never echoed back.
  - `stdin` string: Text given to the command's standard input, which is then closed.
  - `stdinBase64` string: Bytes for standard input, base64.
  - `user` 'sandbox' | 'root': Who runs it: the sandbox user (uid 1000, HOME=/workspace), or root, through the sandbox's passwordless sudo with the same environment and PATH and HOME=/root. Saves prefixing every command with sudo.
  - `timeoutMs` integer: Kill it after this long. Default: runs until it exits or the sandbox stops.
  - `stdinMode` 'closed' | 'pipe'
  - `outputEncoding` 'utf8' | 'base64'
  - `pty` object
    - `cols` integer
    - `rows` integer

## Response `200`

Success

- object
  - `id` string, required
  - `kind` 'process', required
  - `state` 'running' | 'exited' | 'killed' | 'timed_out' | 'unknown', required
  - `exitCode` integer, nullable, required
  - `command` string, required
  - `user` 'sandbox' | 'root': Who it runs as.
  - `cwd` string
  - `pty` boolean
  - `outputEncoding` 'utf8' | 'base64'
  - `stdinOpen` boolean: Input is still open for :write.
  - `stdinOffset` integer: Bytes of input accepted so far.
  - `startedAt` string, date-time, required
  - `endedAt` string, date-time, nullable
  - `timeoutMs` integer, nullable
  - `outputBytes` integer
  - `firstOffset` integer: The oldest byte still kept.
  - `replayed` boolean
  - `outOfMemory` object: Present only when the sandbox ran out of memory and Linux's out-of-memory killer ended the program or something it started. The exit code alone (-9, or 137 from a shell) does not say why.
    - `code` 'out_of_memory', required
    - `processesKilled` integer, required: Processes of this command the out-of-memory killer ended.
    - `memoryMiB` integer, nullable, required: The sandbox's memory size.
    - `message` string, required
    - `hint` string, required: What to do: a larger memoryMiB, or a program that uses less.

## Other responses

- `default`: Error

---

[API](https://skmtc.dev/withruntime/apis/runtime-cloud-api.md) · [All operations](https://skmtc.dev/withruntime/apis/runtime-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/withruntime/apis/runtime-cloud-api/revisions/6f4012286988?raw)
