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

# Plans and limits

> What each tier allows, how limits are counted, and what a 402 means.

## The tiers

|                          | **Free**    | **Starter** | **Scale**    |
| ------------------------ | ----------- | ----------- | ------------ |
| Price                    | \$0 / month | \$7 / month | \$35 / month |
| Workspaces               | 1           | 3           | Unlimited    |
| Members per workspace    | 3           | 10          | 40           |
| Teams per workspace      | 2           | 10          | Unlimited    |
| Projects per workspace   | 1           | 25          | Unlimited    |
| Environments per project | 1           | 10          | Unlimited    |
| Secrets per workspace    | 100         | 2,000       | Unlimited    |
| Provider imports         | ✓           | ✓           | ✓            |
| Secure share links       | —           | ✓           | ✓            |
| Version history          | —           | ✓           | ✓            |

`GET /plans/` returns the live tiers as the deployment holds them; treat that as authoritative if the table above and the dashboard ever disagree.

## How limits are counted

Subscriptions belong to a **user** — one person holds at most one, and it is what they pay for. Limits are then enforced **per workspace**, and a workspace inherits the limits of the user who owns it. Three consequences worth knowing:

* A member on the free tier who joins someone else's Scale workspace works under Scale's allowances *inside that workspace*.
* `max_workspaces` is the one limit counted against the **user**, and it is what bounds how many times a paid tier's allowances can be multiplied.
* `max_environments` is counted within a **project**, not a workspace.

A subscription that is `active` or `due` still entitles its holder. One that has been cancelled or has fallen `past_due` drops back to free.

<Note>
  An account that has never subscribed has no subscription row at all, and resolves to **built-in free defaults** rather than to the Free plan row above. The two differ in three places: the defaults allow 3 projects and 3 environments rather than 1 of each, and do not include provider imports. Check `GET /plans/{workspace_id}/subscription` for what a given workspace actually gets.
</Note>

## Hitting a limit

Any call that would push a workspace past its allowance is refused with **`402 Payment Required`** before it does any work, and the message names the plan you are on. The CLI surfaces it as a plan error pointing at **Settings → Billing**.

The same status covers feature switches: creating a share link on the free tier, importing from a provider without the entitlement, or listing a secret's versions without history all answer `402` rather than `403`.

## Checking usage

```bash theme={null}
sink whoami
```

prints the plan and the seat and secret counters for the linked workspace, when the server supports it. The same thing over HTTP:

```http theme={null}
GET /plans/{workspace_id}/subscription
```

Returns the plan name, its `limits` and current `usage`, with `null` for anything unlimited.

## Managing a subscription

| Method | Path                            | Purpose                                    |
| ------ | ------------------------------- | ------------------------------------------ |
| `GET`  | `/plans/`                       | List the available plans.                  |
| `GET`  | `/payments/subscription`        | The signed-in user's own subscription.     |
| `POST` | `/payments/checkout`            | Start a checkout for `{ "plan_id": "…" }`. |
| `POST` | `/payments/portal`              | Open the billing portal.                   |
| `POST` | `/payments/subscription/change` | Move to another plan.                      |
| `POST` | `/payments/subscription/cancel` | Cancel, optionally at period end.          |

All of it is available from **Settings → Billing** in the dashboard; the endpoints exist for automation. Plan creation and editing (`POST`, `PATCH`, `DELETE` on `/plans/`) is administrative and gated behind a separate operator token.
