Skip to content

Sandbox Billing

Sandbox billing rolls into normal team billing. Usage appears in the same current-month billing view as apps and add-ons.

Line itemWhat it measures
vCPU runtimeRequested vCPU count multiplied by running seconds.
Memory runtimeRequested GiB RAM multiplied by running seconds.
Stopped diskRetained root disk storage after a sandbox stops, fails, expires, or is marked lost.
Checkpoint storageNamed checkpoint storage by size and time.
Template storageReady template version storage by size and time.

List sandbox limits to see the active resource shape, prices, and quota snapshot:

Terminal window
curl https://api.watasu.io/v1/sandbox_limits \
-H "Authorization: Bearer $WATASU_API_KEY"

The response includes a quota object for the selected team:

{
"quota": {
"limits": {
"max_running_instances": 100,
"max_vcpu_count": 256,
"max_memory_mb": 524288
},
"usage": {
"running_instances": 2,
"vcpu_count": 4,
"memory_mb": 4096
},
"reservation": {
"instances": 0,
"vcpu_count": 0,
"memory_mb": 0
}
}
}

Runtime billing starts when a sandbox moves into an active runtime state and stops when it is stopped, destroyed, expired, failed, or marked lost.

Runtime billing is based on the resources you request:

ResourcePrice
vCPU€0.000010 per vCPU-second
Memory€0.000002 per GiB-second

For example, a sandbox using 2 vCPU and 1024 MiB RAM costs:

(2 × €0.000010 + 1 × €0.000002) × running_seconds

That is €0.0792 per hour while it is running.

Template versions define a runtime_baseline. That baseline is the default runtime shape when you start a sandbox:

{
"sandbox_template_version": {
"runtime_baseline": {
"cpu": 2,
"memory_mb": 4096
}
}
}

When creating a sandbox, choose the template shape with template_id:

{
"template_id": "base",
"timeout": 3600
}

Root disk size is platform-managed. It is retained for stopped sandboxes and checkpoints, but it is not a public create-time resource knob.

Self-service sandbox resources use these increments:

  • CPU: 1, 2, 4, 6, or 8 vCPU
  • memory: 512 MiB to 8192 MiB in 512 MiB increments

Quota checks use the resources you request. If a create or restore request exceeds quota, Watasu returns 422 Unprocessable Entity with error: "sandbox_quota_exceeded" and a quota object that includes the limit, current usage, and requested reservation.

Storage is billed by size and time, prorated the same way as runtime:

StoragePrice
Retained disk (stopped sandbox)€0.08 per GiB-month
Checkpoint storage€0.02 per GiB-month
Template storage€0.02 per GiB-month

For example, a stopped sandbox holding a 10 GiB root disk costs €0.80 per month until it is restored or destroyed. A 4 GiB checkpoint costs €0.08 per month until it expires.

When a sandbox is stopped, Watasu keeps the root disk so the sandbox can be inspected, reconnected, restored, or cleaned up deliberately. That retained disk is billed as storage by size and time.

Destroyed sandboxes stop retaining their disk.

Ready checkpoints are billed by stored size and time until they expire or are removed by lifecycle cleanup.

Use explicit checkpoint expiry times that match the job:

{
"sandbox_checkpoint": {
"name": "after-index",
"expires_at": "2026-06-02T12:00:00Z"
}
}

Ready template versions are billed as template storage. This lets you keep reusable environments available for fast sandbox starts.

When a team’s billing account is suspended, Watasu blocks new sandbox runtime spend and returns 402 Payment Required with error: "team_billing_suspended". The response includes the team and account balance fields needed to guide the user back to billing.

Blocked actions include sandbox create, restore, resume/connect, streaming process starts/signals, file writes/moves/deletes, directory create/delete, checkpoint create, and customer template builds. Pause/stop and destroy remain available so you can release resources and clean up retained disks.

Sandbox create and runtime mutation endpoints are rate-limited per authenticated user and remote address. When a request is limited, Watasu returns 429 Too Many Requests, error: "rate_limited", and a Retry-After header.

  • Set timeout on every sandbox.
  • Destroy sandboxes when a job is complete.
  • Use checkpoint expiry times instead of keeping temporary checkpoints indefinitely.
  • Reuse template versions instead of building duplicate templates for the same environment.
  • Review the team’s current-month billing view after adding new automation.