# Credit and pricing

> Rytiv is paid from prepaid credit in euros. Every account admitted from the waitlist starts with 100 EUR; usage is drawn from the credit as it runs. Prices, top-ups, auto-recharge, and what happens at zero.

Rytiv is pay as you go from **prepaid credit in euros**. Every account admitted from the waitlist starts with **100 EUR of credit**. There are no plans and no seats: a machine pays for memory while it is awake and for CPU only while it is computing, storage is priced per gigabyte and month. Nothing is invoiced later.

## Prices

Introductory prices until 31 January 2027. Any change is announced at least 30 days in advance. All prices in EUR, excluding VAT. The pricing page on rytiv.com is the reference; this page repeats it.

| What | Price | How it is counted |
| --- | --- | --- |
| Memory | 0.0076 EUR per GB-hour | Only while the machine is awake. A sleeping machine keeps its memory as a snapshot, billed at the snapshot rate. |
| CPU | 0.035 EUR per vCPU-hour | Active CPU time only. Idle time is not charged. |
| Disk (volumes) | 0.10 EUR per GB-month | The volumes your machines, computers and databases keep their data on |
| Object storage | 0.022 EUR per GB-month | S3-compatible buckets |
| Snapshots and templates | 0.08 EUR per GB-month | Saved machine snapshots, and the templates new machines and sandboxes start from |

A Postgres database, a computer and a sandbox each run as a machine and are billed like one, by memory, CPU and disk. There is no separate price for any of them.

**Included at no charge:** builds on Rytiv's builders, TLS certificates and custom domains, outbound data transfer, and team members. Fair use applies.

## Limits on the starting credit

An account on the starting credit can have **2 computers** and **10 apps** at a time, computers included. The limit is checked when something is created, never when it wakes or starts: what you have keeps running. The next create answers `403` with `org-limit-computers` or `org-limit-apps`, the body carries `limit` and `current`, and the sentence says what to delete or that you can contact us for more. Every other bound is on [Limits and quotas](https://docs.rytiv.com/concepts/limits.md).

The starting credit is granted once per person. An organization without it begins with a balance of zero and is blocked until its first top-up.

## When the credit is used up

The balance reaching zero **stops** your machines; nothing is deleted, disks and volumes stay. Reads keep working, so logs, lists and the console still answer, and nothing new starts: a request that would start or create something answers `402` with the code `credit-blocked`. A top-up or an automatic recharge lifts the block, and the machines the block stopped are started again.

Before that, the account carries `warned` once the balance falls to 20 percent of the reference top-up (the auto-recharge amount if you set one, otherwise your last top-up), and the console shows it.

## Top up

Credit is topped up in the Rytiv console by an admin of the team, under **Credits & usage**: a one-time top-up by card payment (10 EUR to 1,000 EUR), or auto-recharge with a threshold, an amount (10 to 500 EUR) and a monthly ceiling (at least the amount, at most 2,000 EUR). Card details are entered on the payment provider's page and never reach Rytiv. A failed automatic charge is retried after 15 minutes.

Top-ups cannot be made over the API or with the CLI: the routes behind the console page (`POST /v1/billing/topups`, `PUT /v1/billing/auto-recharge`, `POST /v1/billing/portal`) take only the console's signed proof of an admin, and a plain API key answers `403` with `billing-console-only`.

## Read your balance

**curl**

```bash
curl "https://api.rytiv.app/v1/billing/credits" \
  -H "Authorization: Bearer $RYTIV_TOKEN"
```

**TypeScript**

```ts
const res = await fetch("https://api.rytiv.app/v1/billing/credits", {
  headers: { Authorization: `Bearer ${process.env.RYTIV_TOKEN}` },
});
const { balanceCents, blocked, warned } = await res.json();
```

**Python**

```python
import os, requests

account = requests.get(
    "https://api.rytiv.app/v1/billing/credits",
    headers={"Authorization": f"Bearer {os.environ['RYTIV_TOKEN']}"},
).json()
print(account["balanceCents"], account["blocked"])
```

**CLI**

```bash
ry billing preview
ry usage --from 2026-10-01T00:00:00Z --to 2026-11-01T00:00:00Z
```

| Method | Path | What it does |
| --- | --- | --- |
| `GET` | `/v1/billing/credits` | `balanceCents` (and the exact `balanceMicros` as a string), `blocked`, `blockedAt`, `warned`, the auto-recharge settings and `prepaid` (whether the organization is on prepaid credit at all) |
| `GET` | `/v1/billing/ledger` | The ledger, newest first: top-ups, usage bookings, grants, refunds and adjustments. `?limit=` up to 500. |
| `GET` | `/v1/billing/preview` | What a period cost, line by line, from the metered usage; `ry billing preview` prints it |

All three only read. A key narrowed by [scopes](https://docs.rytiv.com/authentication.md#narrow-a-key-scopes) cannot reach them (money stays with full keys); an [agent key](https://docs.rytiv.com/authentication.md#agent-keys) can read them. Every field is in the [API reference](https://docs.rytiv.com/reference/api/billing.md).

## Region

At launch Rytiv has one region, in the EU. Your apps, databases and files stay there; see [Regions](https://docs.rytiv.com/concepts/regions.md).
