# What Is Metered

Insulin measures six resources. Each is recorded as it is consumed, priced against the rate
in effect for that month, and taken off your credit balance.

---

## The six metered resources

These are the rows you see under **Resource** in the usage breakdown, with the unit each
quantity is counted in.

| Resource | Unit | Measured |
|---|---|---|
| **AI input tokens** | tokens | Everything sent to the model on each request |
| **AI output tokens** | tokens | Everything the model produces |
| **Sandbox processor** | processor-seconds | While a sandbox is running |
| **Sandbox memory** | GB-seconds | While a sandbox is running |
| **Sandbox storage** | GB-seconds | For as long as the sandbox exists, running or stopped |
| **Object storage** | MiB-months | Files held in your organization's storage |

### Tokens

Input and output are counted separately because every provider charges differently for each
direction, so each direction needs its own rate.

**Cached context is counted in full.** A long conversation resends earlier turns on every
request, and providers charge for those tokens even when they serve them from cache. They are
recorded as input tokens, and today they are priced at the same rate as fresh input.

**Reasoning tokens count as output.** Models that think before answering bill that thinking at
the output rate, and Suger records it the same way.

**Failed and cancelled requests are still billed.** A generation that fails partway has
already been run, and the provider charges Suger for it whether or not the answer reached
you. Whatever token count the provider reports for the failed call is what is metered.

### Sandboxes

A sandbox bills three things independently, because the sandbox provider bills Suger for three
things independently.

- **Processor and memory** accrue while the sandbox is *running*. Stopping it ends both.
- **Storage** accrues for as long as the sandbox *exists*. Stopping does not release the
  volume — it is still reserved for you, and Suger is still charged for it. **Deleting the
  sandbox is what stops the charge.**

Accrual is measured in windows rather than in one lump at the end, so a sandbox left running
for weeks shows up in the usage breakdown as it goes rather than arriving as a surprise.

### Object storage

Object storage is not consumed, it is *held* — so it is measured as a gauge rather than
counted. Once a day, Suger records how much your organization is holding, across shared
organization storage and each member's own storage together.

**The month is billed on its highest daily reading.** Not the average, and not the figure at
month end. If you hold 500 GB for a single day and delete it, that month bills 500 GB: the
capacity was reserved on the day you used it, and the supplier charged for it then.

## From consumption to a number on your bill

```d2
direction: right
classes: {
  box: { width: 215; style.border-radius: 8 }
}
use: "You use Insulin\nChat, agents, jobs,\nsandboxes, files" { class: box }
meter: "Measured\nQuantity, plus who, which\napp, model and provider" { class: box }
price: "Priced\nAgainst the rate in\neffect for that month" { class: box }
ledger: "Balance\nTaken off your credit,\nsoonest-expiry first" { class: box }
rollup: "Usage breakdown\nRe-aggregated for\nthe console" { class: box }
gate: "Spend check\nDecides whether the\nnext request may run" { class: box }
use -> meter -> price -> ledger
ledger -> gate: "within a minute"
ledger -> rollup: "every couple of hours"
```

The two arrows out of the balance are why the page can look inconsistent for a short while:
the **Credit balance** moves within about a minute of a request, while the **usage
breakdown** is re-aggregated every couple of hours. A balance that has dropped against a table
that has not caught up is the normal, expected state — not a missing charge. See
[Reading your usage](/insulin/billing/usage/).

## How prices are set

**Suger prices everything; the payment provider only collects.** Stripe holds no rate card
and performs no pricing — it receives an already-priced invoice. That is what makes the
invoiced total equal the metered total.

- **Rates are effective-dated and immutable.** A price change applies to the month it takes
  effect in and to later months. It never reaches backwards: re-pricing a closed period
  reproduces the original amount.
- **Rates are refreshed monthly**, ahead of the month they apply to, from the supplier's
  published prices.
- **An automatic price rise is capped.** A refreshed rate more than 25% above the previous one
  is rejected and the previous price is kept, so a misread supplier page cannot reach an
  invoice. Price *cuts* are accepted at any size — providers cut sharply and often, and
  refusing a real cut would keep overcharging you.
- **A model with no published rate is still billed, at a documented fallback.** The fallback
  supplier cost is $5.00 per million input tokens and $10.00 per million output tokens; with
  the margin below applied, the charged rate is **$7.50 per million input tokens** and
  **$15.00 per million output tokens**. Newly released models are the usual case, and
  consumption is never silently dropped for want of a price.

Suger's price is the supplier's cost plus a margin: **50%** on model calls Suger supplies the
key for, and **30%** on sandbox and storage. Prices are in **US dollars** and exclude tax.

### Using your own provider keys (BYOK)

If you connect your own model provider key, that provider bills you directly for the tokens,
under your own contract. Suger's charge is then a **flat fee per unit** rather than a
percentage — a percentage of a cost Suger does not incur would be nothing, while the platform
still routes, meters and secures every request.

Two consequences worth knowing:

- BYOK usage still appears in your usage breakdown, attributed to the provider whose key was
  used.
- A **zero balance still pauses BYOK requests**, because the per-unit fee is still owed. See
  [When AI pauses](/insulin/billing/when-ai-pauses/).

## What is never billed

- **Suger's own AI.** Platform features that call a model internally — summarization, search
  indexing, embeddings, reranking, field mapping — are Suger's cost, not yours. They are
  metered for operational monitoring and never reach billing.
- **Anything outside Insulin.** Only consumption in the AI service is billed.
- **Reading what you already have.** Opening, listing or searching your stored files, and
  starting, stopping or connecting to an existing sandbox, are never refused for billing
  reasons and are not separately charged.
- **Database storage.** Not metered.

## How long the detail is kept

| Record | Kept for |
|---|---|
| Individual consumption records | 90 days |
| The attributed usage breakdown you see in the console | 13 months |
| Period totals | Indefinitely |

After 13 months the breakdown is *collapsed* rather than deleted: the attribution — which
user, which app, which model — is dropped, and a daily total per resource remains. A history
that ended abruptly would read as data loss.

The period selector offers the last **12 months**, which is inside the window where the full
attributed breakdown still exists.
