> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anonalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Usage and billing

> What is metered, and where to read it: dashboard, CLI, MCP and API.

Usage is metered per sandbox and priced at your plan's [rates](https://docs.anonalabs.com/compute/pricing.md). During the preview no payment method is needed and nothing is charged; invoices are drafts.

## Where to see it

| Where | What | Who |
| - | - | - |
| Dashboard **Usage** page | The month by day, per meter, per sandbox and per template | Every role |
| Dashboard **Billing** page | Plan, rates and invoice drafts | Owners and admins |
| `anona-compute usage` | Meters, totals, the part not yet rated, a projection for the current month, the most expensive sandboxes | Browser sign-in of any role, or a key with `usage:read` |
| `anona-compute usage --billing` | Plan, rates and invoices | Owners and admins, or a key with `billing:read` |
| MCP tool `get_usage` | The same as `anona-compute usage`, for agents | As above |
| `GET /v1/usage`, `GET /v1/billing` | The JSON documents behind all of the above | As above |

API keys need the scope: the **Read only** preset has `usage:read`, **Full access** has both. Keys created before these scopes existed do not have them.

```bash usage.sh theme={null}
anona-compute usage                         # this month
anona-compute usage --period 2026-10 --top 10
anona-compute usage --json | jq '{period: .period.key, total: .totals.amountUsd, meters: [.meters[] | {meter, quantity}]}'
anona-compute usage --billing --json | jq '{provider, rates: [.rates[] | {meter, unitPriceUsd}]}'
```

```python usage_api.py theme={null}
import os
import httpx

r = httpx.get(
    "https://api.compute.anonalabs.com/v1/usage",
    params={"period": "current"},
    headers={"X-API-Key": os.environ["E2B_API_KEY"]},
)
r.raise_for_status()
usage = r.json()
print(usage["period"]["key"], usage["totals"]["amountUsd"], usage["totals"].get("projectedUsd"))
for m in usage["meters"]:
    print(f'{m["meter"]:<20} {m["quantity"]:>10.3f} {m["unit"]:<10} ${m["amountUsd"]:.4f}')
```

## What counts

| Meter | Counted when |
| - | - |
| Active vCPU-hours | The sandbox's CPU is busy, while it runs |
| Resident GiB-hours | Memory the sandbox actually holds, while it runs |
| Snapshot storage | A paused sandbox's snapshot exists |
| Egress | Bytes leave the sandbox to the internet |

Deleting a sandbox stops all four. Pausing stops the first two. Usage is rated hourly; until then the totals show it as `pendingUsd`, estimated at the same rates.

## Coming soon

Card payments and issued invoices, and spend caps you set yourself. For per-sandbox metrics in your own monitoring, see [OpenTelemetry export](https://docs.anonalabs.com/compute/guides/webhooks.md#opentelemetry-export).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.