# Billing and pricing

You pay per second for the time a sandbox's VM is actually running. A paused sandbox costs **$0 for compute**.

> Prices in USD, excluding VAT. Private beta pricing; we will announce any change at least 30 days in advance.

## Compute

| Size | vCPU | RAM | Disk included | Price per active hour | Per second |
| --- | --- | --- | --- | --- | --- |
| `small` | 2 | 4 GB | 20 GB | **$0.015** | $0.0000042 |
| `default` | 4 | 8 GB | 50 GB | **$0.030** | $0.0000083 |
| `large` | 8 | 16 GB | 100 GB | **$0.060** | $0.0000167 |

- Billed **per second** of VM run time, with no minimum.
- **Paused = $0 compute.** You pay only for snapshot storage (below), which is free for the first 30 days.
- The size is set by `size` on `POST /sandboxes`. A fork has the same size as its source.

### Billing per state

| State | Compute billed? | Notes |
| --- | --- | --- |
| `queued` | No | `priority: "batch"` only, waiting for capacity. |
| `creating` | No | |
| `running` | **Yes**, per second | Includes time spent in `resuming` and `pausing`. |
| `pausing`, `resuming` | Yes | Typically under a second. |
| `paused` | **No** | Snapshot storage only (free for 30 days). |
| `deleting`, `deleted` | No | Disk and pause snapshot are removed. |
| `error` | No | |

See [Lifecycle](concepts/lifecycle.md) for how auto-pause and wake on request move sandboxes between states.

## Batch and off-peak: −50%

Compute is billed at **half price** when either:

- the sandbox was created (or forked) with `priority: "batch"`. Batch sandboxes may wait in the `queued` state until capacity is free, so use them for jobs that can start later (evals, CI, data processing); or
- the seconds fall into the EU night window, **22:00–07:00 CET**, for any sandbox. This applies automatically.

| Size | Batch / off-peak per hour |
| --- | --- |
| `small` | $0.0075 |
| `default` | $0.015 |
| `large` | $0.030 |

## Always-on

**$19.90 per month** for a `default` sandbox that never pauses (`always_on: true`). This flat price replaces the hourly price for that sandbox. It is prorated by day when you turn it on or off mid-period. Use it for agents that must stay running 24/7. A `default` sandbox running all month at the hourly rate would cost about $21.90 (730 h × $0.030).

```ts
await sandbox.update({ always_on: true });
```

## Storage

| Item | Price |
| --- | --- |
| Pause snapshot (RAM + disk state of a paused sandbox) | **Free for 30 days** from the snapshot, then **$0.03 per GB-month** |
| Named snapshots and templates | Same: free for 30 days, then $0.03 per GB-month |
| Disk beyond the size's included disk (`disk_gb`) | **$0.05 per GB-month** |

Stored sizes are measured after compression and deduplication (`storage_bytes` on snapshots and templates).

## Plans

| Plan | Price | Includes |
| --- | --- | --- |
| **Free** | $0 | One-time **20 hours** of `default` (no renewal), **2** concurrent sandboxes, no card required. |
| **Starter** | **$19 / month** | **$19 of usage credit every month** (about 630 hours of `default`). Usage above the credit is billed at the standard rates. **10** concurrent sandboxes. |
| **Team** | **$199 / month** | **$199 of usage credit every month**. After the credit is used, all rates are **15% lower**. **1,000+** concurrent sandboxes. Slack support. 99.9% uptime target; the SLA applies once the second location is live. |
| **Enterprise** | Custom | Annual contract, support, bring your own cloud (BYOC). |

### Monthly credit expires

**Starter and Team credit expires at the end of each monthly billing period. Unused credit does not roll over and is not refunded.** On the first day of the next period you receive a fresh credit of $19 (Starter) or $199 (Team). We email a reminder before the period ends. `GET /usage` shows `totals.credit_remaining_usd` for the current period.

### How credit and discounts combine

1. Each charge is priced first: per-second compute at the size rate, with **batch/off-peak at 50%** of that rate; Always-on at $19.90 per VM per month (prorated per day); storage after the free period.
2. **Plan credit is used first** for every charge type: compute, batch, Always-on and storage.
3. When the credit is used up, the rest is billed as overage. **Team** pays overage **15% below** the rates above, and batch gets both discounts (`rate × 0.5 × 0.85`). Starter pays overage at standard rates.
4. Seconds in `pausing` and `resuming` are billed like `running`. `queued`, `creating`, `paused` and `error` are not billed for compute.
5. Overage is charged to your card when it reaches $20, $100 and then every $500, and at the end of the period.

## Worked examples

**One coding agent, active about 2.4 hours a day** (10% of the month), `default` size, auto-pause on:

73 active hours × $0.030 = **$2.19 / month** in compute. The paused time costs nothing for 30 days of snapshot storage.

**1,000 end users, each with their own `default` sandbox, each active 10% of the time:**

1,000 × 73 h × $0.030 = **about $2,190 / month**.

**Eval run:** 500 `small` sandboxes for 1 hour with `priority: "batch"`:

500 × 1 h × $0.0075 = **$3.75**.

## Controlling spend

- **Spend limit:** `PUT /account/spend-limit` with `monthly_limit_usd`. When reached, new sandboxes are rejected with `402 spend_limit_reached`, and running sandboxes are paused (`on_limit: "pause_running"`, default) or left running (`on_limit: "block_new"`). Email alerts fire at `alert_thresholds` (default 50%, 80%, 100%), and each one also sends a `usage.threshold` webhook. Plan credit (and the Free plan's 20 hours) sends `usage.threshold` at 80% and 100% too, and an email 3 days before unused credit expires.
- **Auto-pause:** keep it on (default 300 s idle). Lower `auto_pause.idle_timeout_seconds` for bursty agents.
- **TTL:** set `ttl_seconds` to delete short-lived sandboxes automatically.
- **Per-customer cost:** label sandboxes (`labels: { customer: "acme" }`) and call `GET /usage?group_by=label&label_key=customer` to re-bill your own users.

```bash
curl -sS "https://api.task.cloud/v1/usage?group_by=label&label_key=customer" \
  -H "Authorization: Bearer $TASKCLOUD_API_KEY"
```

## FAQ

**Do I pay while a sandbox is paused?** Not for compute. The pause snapshot is stored free for 30 days, then $0.03 per GB-month.

**Does unused Starter or Team credit carry over?** No. It expires at the end of each monthly period.

**What happens when the Free plan's 20 hours run out?** New sandboxes are rejected with `402 free_hours_exhausted` and running ones are paused. Upgrade to continue. Your sandboxes and snapshots are kept.

**Is there a charge for creating or deleting sandboxes?** No. Only run time and storage are billed.

**Is network traffic billed?** Not separately during the beta. Abuse (for example mass outbound traffic) is not allowed; see [Security](security.md).
