Core concepts

Runs (one-shot)

Submit code, get a result. The simplest way to execute untrusted code.

A run executes one piece of code in a fresh, single-use sandbox. The pod is created on demand, runs your code, returns output, and is destroyed. Nothing persists between runs — for state across steps, use an interactive session.

Lifecycle

  1. POST /v1/run queues the run and returns 202 with a run_id.
  2. An orchestrator worker launches a gVisor sandbox and executes your code.
  3. The run reaches a terminal status; output and exit code are recorded.
  4. You read the result via GET /v1/runs/{run_id} or receive a webhook.

Submitting a run

bash
curl https://api.quicktane.com/v1/run \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "language": "python",
    "code": "print(sum(range(10)))",
    "timeout": 30
  }'

Parameters

FieldTypeNotes
languagestringRequired. python or node.
codestringRequired. Up to 100,000 characters.
timeoutintegerOptional. Seconds; defaults to 30. Capped by your plan.

The run object

json
{
  "run_id": 42,
  "status": "completed",
  "language": "python",
  "exit_code": 0,
  "duration_ms": 137,
  "output": "45\n",
  "created_at": "2026-07-19T12:00:00.000000Z"
}

output combines stdout and stderr as the sandbox produced it. duration_ms is the measured execution time, which is also what usage is metered against.

Statuses

StatusTerminalMeaning
pendingnoQueued, not yet started.
runningnoExecuting in a sandbox.
completedyesFinished; see exit_code.
failedyesThe code exited non-zero.
timeoutyesExceeded the timeout and was killed.
killedyesTerminated (e.g. resource limit).
erroryesInfrastructure error before/while running.

Poll until status is terminal, or register a webhook so QuickTane pushes the finished run to you — no polling required.