---
title: Billing
description: One plan, per seat, monthly or annual — the trial, what each billing state allows, and what happens when a payment fails.
section: Administration
order: 2
---

# Billing

Laver has **one paid plan, Pro**, charged **per seat**, **monthly or annually**. A
card is required up front, and a workspace's first subscription comes with a
**14-day free trial** — the trial starts when the card is entered at Checkout, not
when the workspace is created. A workspace that has not subscribed yet is locked.

**Only the workspace owner can start, change or cancel a subscription.** Admins and
everyone else can read the billing summary — plan, seats, renewal date — but any
attempt to act on it answers
`403 {"error": "Only the workspace owner can manage billing."}`.

Everything to do with money is in **Billing** in the app. Payments, cards, invoices
and tax are handled by Stripe; Laver never sees or stores a card number.

## What it costs

| Interval | Price                    |
| -------- | ------------------------ |
| Monthly  | £2.49 per seat per month |
| Annual   | £19.99 per seat per year |

Prices are exclusive of VAT. Stripe Checkout collects a billing address and works
out the tax, and a business can enter a VAT number there to reverse-charge rather
than pay VAT it would have to reclaim. Checkout is the authority on what you will
actually be charged, and shows it before you confirm.

Your next invoice is the seat price multiplied by your billable seats, which the
Billing page shows you.

## What counts as a seat

A **billable seat** is an active membership in a billable role: **owner, admin or
member**.

- **Viewers are free.** They never count and never appear on an invoice.
- **Outstanding invitations to admins and members hold a seat** from the moment
  they are sent, until they are accepted, revoked or expired. Viewer invitations
  do not.
- Deactivated and removed people do not count.

Seat changes go to Stripe as they happen, and are **prorated**: adding someone
mid-cycle charges for the days they will use, removing someone credits the rest.

## The free trial

- **14 days**, on the Pro plan with Pro limits.
- **A card is taken at Checkout**, before the trial starts. Nothing is charged
  until the trial ends, and Stripe bills automatically at the end of it.
- **One trial per workspace, ever.** Cancelling and coming back does not earn a
  second one — a workspace that has subscribed before is charged straight away at
  its next Checkout. The Billing page tells you which of the two applies before
  you start.
- The owner gets a reminder email **3 days before** the trial ends.

## Plan limits

|         | Free | Pro       |
| ------- | ---- | --------- |
| Seats   | 3    | Unlimited |
| Boards  | 2    | Unlimited |
| Storage | 1 GB | Unlimited |

A workspace on trial gets the **Pro** limits.

**There is no free tier you can sign up for.** A workspace that has never
subscribed is locked, not degraded — see the states below. The `free` limits above
apply only to workspaces that have been given complimentary access.

When a limit is hit, the action is refused with **402** and a message naming the
plan, the limit and the current usage, along with the current prices, so the way
out is offered at the point of refusal.

## Billing states

The Billing page shows one of six states. What a workspace can do depends entirely
on which:

| State          | What it means                                                       | Reads  | Writes  | Adding members, boards, uploads |
| -------------- | ------------------------------------------------------------------- | ------ | ------- | ------------------------------- |
| `unsubscribed` | Signed up, never subscribed. The starting state of a new workspace. | **No** | No      | No                              |
| `trialing`     | Inside the 14-day trial.                                            | Yes    | Yes     | Yes, at Pro limits              |
| `active`       | Paid and current.                                                   | Yes    | Yes     | Yes, at Pro limits              |
| `past_due`     | An invoice failed; Stripe is retrying.                              | Yes    | **Yes** | **No**                          |
| `read_only`    | Unpaid past the grace period.                                       | Yes    | **No**  | No                              |
| `canceled`     | Subscribed once, no longer.                                         | **No** | No      | No                              |

`unsubscribed` and `canceled` are the same lock. In both, opening a board, a
ticket or the wiki answers:

```json
{
    "error": "This workspace does not have an active subscription. Start one in Billing to get back in.",
    "subscription_required": true
}
```

The status is **402**. Billing itself stays reachable — the owner has to be able to
get to the page that sells them the way back in — and the owner can still rename or
delete a workspace they are locked out of. Your other workspaces are unaffected.

Cancelling therefore **locks the workspace rather than dropping it to a free
tier.** Nothing is deleted, and paying again restores everything, but the boards
are shut in the meantime. Plan accordingly before you cancel.

## What `past_due` and `read_only` allow

These two are deliberately gentler than the lock, because losing access to your own
data is not a good reason to churn.

**`past_due`** — the workspace keeps working. People read and write as normal. What
stops is _growth_: inviting anyone, creating a board, and uploading a file are all
refused with

```json
{
    "error": "This workspace has an unpaid invoice. Update the payment method in Billing to add anything new."
}
```

**`read_only`** — the workspace is fully readable and fully exportable, and nothing
can be written. Every write answers 402 with

```json
{
    "error": "This workspace is read-only because an invoice has not been paid. Settle it in Billing to start writing again.",
    "billing_frozen": true
}
```

This applies to everyone regardless of role — an owner in a read-only workspace
cannot write either.

## The non-payment ladder

| When                         | What happens                                                                                     |
| ---------------------------- | ------------------------------------------------------------------------------------------------ |
| A payment fails              | The workspace moves to `past_due` and the owners are emailed. Stripe keeps retrying.             |
| **14 days** still unpaid     | The workspace moves to `read_only`. Owners are emailed. Reads and exports continue; writes stop. |
| **90 days** read-only        | Owners get a final warning email.                                                                |
| Any point an invoice is paid | The workspace returns to `active` immediately, and the clocks reset.                             |

**Nothing on that ladder deletes anything.** The 90-day warning is the last
automated step; closing a workspace for good is a human decision, never a timer.

To recover, update the payment method in the Stripe billing portal. The moment the
outstanding invoice is paid the workspace is `active` again — you do not have to
wait for anything to catch up.

## The billing portal and invoices

**Billing → Open billing portal** takes the owner to Stripe's hosted portal, where
you can:

- update or replace the card
- pay an outstanding invoice
- download past invoices and receipts
- change or cancel the subscription

Invoices live in the portal rather than in Laver, so **Invoices** on the Billing
page opens the same portal.

The portal is only available once a workspace has been billed at least once.
Before that it answers
`409 {"error": "This workspace has never been billed. Start a subscription first."}`
— start the subscription from the Billing page instead.

If Stripe is unreachable, both Checkout and the portal answer
`502 {"error": "Stripe is unavailable. Try again shortly."}`. Nothing has changed;
retry.

## Cancelling

Cancel in the Stripe billing portal. A cancellation scheduled for the end of the
period is shown on the Billing page along with the date, and until then the
workspace carries on normally. When it takes effect the workspace moves to
`canceled` and locks.

Deleting a workspace cancels its subscription immediately, so a closed workspace
does not keep billing. See
[Exports and deletion](/docs/administration/export-and-deletion).

## Using the API

Session tokens only.

| Action                   | Call                                                                                                                               |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Read the billing summary | `GET /billing/<workspace-uuid>` — any active member                                                                                |
| Start a subscription     | `POST /billing/<workspace-uuid>/checkout` with `{"interval": "monthly"}` or `"annual"` — owner only, returns a Stripe Checkout URL |
| Open the portal          | `POST /billing/<workspace-uuid>/portal` — owner only, returns a Stripe portal URL                                                  |

The summary includes `billing_status`, `plan`, `seats`, `active_members`,
`trial_available`, `current_period_end`, `cancel_at_period_end` and the limits for
the effective plan — enough to render your own billing banner.
