# Pricing

A rent.dev sandbox costs its provisioned memory plus the CPU it used. The CPU part is capped at what the same vCPUs would cost at E2B's list rate, so the metered price of a sandbox is never more here than E2B's list price for the same shape and time. Adding credit to the balance carries a fee on top of that: 5.5% of the credits, at least $0.80, by card, and 5.5% over x402. [Payments](/docs/payments#fees) has the fee table.

`GET https://api.rent.dev/v1/quotes`

## The formula

```text
cost = provisioned GiB-hours x $0.0162
     + the lower of  active vCPU-hours x $0.128
                and  provisioned vCPU-hours x $0.0504
```

| Component | Rate | Billed while |
| --- | ---: | --- |
| Memory | $0.0162 per GiB-hour | The sandbox runs, busy or idle. |
| Active CPU | $0.128 per vCPU-hour | A vCPU is doing work. |
| Provisioned CPU (the cap) | $0.0504 per vCPU-hour | The sandbox runs. Applies when it is lower than the active-CPU amount. |

The memory rate and the cap are E2B's list rates: $0.000014 per vCPU-second and $0.0000045 per GiB-second, read from [e2b.dev](https://e2b.dev/pricing) on 2026-11-11. The cap takes over once a sandbox's CPU has been busy more than 39.375% of the time. Below that, the idle time is what you save.

## How usage is counted

- Usage is metered by the second and priced on the sandbox's totals since it was created. The lower-of comparison is made over the whole session, not minute by minute.
- A paused sandbox has no usage and costs nothing.
- A template build is priced as a sandbox of the build's size.
- The final charge is rounded to the nearest micro-dollar.

## Holds

Before a sandbox starts, rent.dev reserves the most it could cost: the cap rate for its shape, times its timeout. A 2 vCPU, 4 GiB sandbox tops out at $0.1656 per hour, so the default 300 second timeout holds $0.013800.

Usage is charged against the hold as it arrives. When the sandbox stops, what was not used returns to the available balance. Extending a timeout takes the added hold first, and a balance too short for a hold answers 402.

## Worked examples

Each row is one task on a 2 vCPU, 4 GiB sandbox, at the CPU duty the profile assumes. The last column is the same task at E2B's list price.

| Profile | Length | CPU busy | Memory | CPU | rent.dev | E2B list |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| Agent loop | 30 min | 10% | $0.0324 | $0.0128 (active) | $0.0452 | $0.0828 |
| Interactive | 30 min | 50% | $0.0324 | $0.0504 (provisioned) | $0.0828 | $0.0828 |
| Workspace | 4 h | 20% | $0.2592 | $0.2048 (active) | $0.4640 | $0.6624 |

The CPU column says which side of the comparison applied: `active` when the sandbox was idle enough to pay for the CPU it used, `provisioned` when the cap took over.

## Against other vendors

[The price board](/prices) runs the same three tasks through every vendor with published rates. Every public GPU and CPU offer the catalog may show and compare, from every provider, is in [the catalog](/catalog). rent.dev is not the lowest on every row, and the board shows that as it is. On the default shape today:

- Agent loop: Northflank quotes below rent.dev.
- Interactive: Northflank, Fly.io and Cloudflare quote below rent.dev.
- Workspace: Northflank, Cloudflare and Fly.io quote below rent.dev.

A quote covers CPU, memory, disk that comes with an instance type and per-creation fees. Free monthly allowances, plan fees, regional multipliers, storage and egress are left out; the board lists what that means for each vendor.

## Workload profiles

| Profile | CPU busy | One task |
| --- | ---: | ---: |
| `agent-loop` | 10% | 30 min |
| `interactive` | 50% | 30 min |
| `workspace` | 20% | 4 h |

A profile is an assumption about how busy the CPU will be. It prices a quote and helps place a sandbox before the account has history. What a sandbox is charged always comes from its measured usage.

## The quotes endpoint

```sh
curl -s "https://api.rent.dev/v1/quotes?profile=agent-loop&cpu_count=2&memory_mb=4096"
```

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `profile` | query | `agent-loop \| interactive \| workspace` | One profile; default all three. |
| `cpu_count` | query | `integer, 1 to 64` | Default 2. |
| `memory_mb` | query | `integer, at least 128` | Default 4096. |

It needs no key and takes only these three parameters; any other answers 400 `unsupported_parameter`. Each quote lists rent.dev's row first, then the vendors from lowest to highest, each with `billed_by`, the rates used, and the page and date they were read. `gpus` holds hourly GPU rows: `usd_per_hour` prices the vendor's quantity unit (the whole node or instance when the row prices one), and `usd_per_gpu_hour` is the normalised per-GPU figure to compare across rows; a row without one carries `unpriced_reason`, saying why. Answers are cached for 60 seconds.

## GPU pods

rent.dev sells no GPU time. A GPU pod runs on your own RunPod key and RunPod bills it at its hourly rate; see [bring your own key](/docs/byok#gpu).
