# Billing

> Native Stripe billing for client sites - per-site subscriptions, the operator billing dashboard, and configurable non-payment enforcement.

Seedly Sites includes native Stripe billing so each client site can carry its own subscription - your client paying you, through your Stripe account. It is fully opt-in: sites without billing configured behave exactly as before and are never restricted.

---

## How It Fits Together

| Piece | What it is |
|-------|-----------|
| **Your Stripe account** | Owns the products, prices, customers, and payments |
| **Per-site Billing page** | Where a subscription is started and managed for one site |
| **Operator billing dashboard** | Every site's billing state in one table |
| **Enforcement** | What (if anything) happens to a site when payment lapses |

Plans and prices live in Stripe - the platform references a Stripe price and displays its nickname as the plan label. To change what you charge, change the price in Stripe.

---

## The Per-Site Billing Page

Each site has a **Billing** page showing the subscription status, plan, and renewal date.

### Starting a Subscription

1. Open the site's **Billing** page
2. Click **Subscribe**
3. Complete payment on Stripe's hosted checkout page
4. You are returned to the Billing page; the status flips to **Active** once Stripe confirms

### Managing a Subscription

Once a subscription exists, **Manage billing** opens Stripe's hosted customer portal for that site: update the card, view invoices, cancel, or resubscribe. A canceled site's button becomes **Resubscribe**.

### Who Can Use It

Managing a site's billing requires administrator-level access on that site (or the operator) - see [Users and Roles](/docs/help/users-roles#site-roles). Editors and below see the billing state but are told to contact their account manager. Payments are processed entirely by Stripe on Stripe-hosted pages; card details never touch your instance.

---

## Billing Statuses

The platform mirrors the Stripe subscription into one of six statuses:

| Status | Meaning |
|--------|---------|
| **No subscription** | Billing was never set up for this site - never restricted |
| **Trialing** | In a Stripe trial period - healthy |
| **Active** | Paid and current - healthy |
| **Past due** | A renewal payment failed - delinquent |
| **Unpaid** | Payments kept failing - delinquent |
| **Canceled** | The subscription ended - delinquent |

Status updates flow in automatically from Stripe (via the webhook you configure at setup). Only the three delinquent states can ever trigger enforcement.

---

## Non-Payment Enforcement

Each site has an **Enforcement** setting that decides what happens while its subscription is delinquent:

| Setting | Effect while delinquent |
|---------|------------------------|
| **Instance default** | Defers to your instance-wide default (edit-lock unless you configure otherwise) |
| **None** | Never restrict this site |
| **Edit-lock** | Client editing, publishing, and deploys are frozen; the live site stays up |
| **Suspend** | Everything edit-lock does, plus the live site is taken offline |

Points that matter in practice:

- **Sites with no subscription are never enforced.** Adding the billing feature to your instance cannot disturb existing client sites.
- **The operator always bypasses enforcement** - you keep full editing and deploy access on a delinquent site so you can fix, restore, or wind it down.
- Enforcement lifts automatically once the subscription is healthy again (the client pays through **Manage billing**).
- Suspension is applied at the serving edge and is deliberately fail-safe: if the platform cannot be reached to confirm a suspension, the live site stays up.

---

## The Operator Billing Dashboard

**Operator portal -> Billing** aggregates every site: status, plan, renewal date, and the enforcement that currently applies. Delinquent sites sort to the top, so the dashboard doubles as your "who needs a nudge" list.

---

## Setting It Up

Billing activates when your instance has its Stripe configuration set (as part of [provisioning](/docs/help/provisioning)):

- A Stripe secret key
- The Stripe price to subscribe sites to
- A Stripe webhook pointed at your instance, so subscription changes sync automatically
- Stripe's customer portal enabled in your Stripe dashboard (it powers **Manage billing**)
- Optionally, an instance-wide default enforcement mode

Until those are set, Billing pages show "Billing isn't configured for this instance yet" and nothing is enforced.

---

## Summary

- Per-site Stripe subscriptions through your own Stripe account, opt-in per site
- **Subscribe** = Stripe Checkout; **Manage billing** = Stripe customer portal
- Six statuses mirrored from Stripe; only past due, unpaid, and canceled are delinquent
- Enforcement per site: none, edit-lock (default), or suspend - operator always bypasses
- The operator billing dashboard shows the whole fleet, problems first

---
Source: https://seedlysites.com/docs/help/billing
