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

# Billing

> Plans, Dodo Payments integration, hard caps, upgrade and cancel flow.

<Note>
  Paid plans are launching soon — every workspace is on **Free** for now. The plans below describe what Solo and Pro include once checkout is live.
</Note>

**Paid tiers** (Solo, Pro) ship the full feature set — REST API, MCP server, CLI, webhooks, schema management, custom objects, data export. No feature gating between Solo and Pro; only volume gating.

**Free is experience-only**: it lets developers feel the platform via REST/MCP/CLI but blocks production extensibility (schema, webhooks, multi-key) and auto-pauses workspaces after 30 days of agent inactivity. Upgrade to Solo to actually build on Salty.

## Plans

| Plan | Price   | API calls / mo | Records | Sustained     | Burst         |
| ---- | ------- | -------------- | ------- | ------------- | ------------- |
| Free | \$0     | 500            | 10      | 2 req/sec     | 10 req/sec    |
| Solo | \$20/mo | 100,000        | 25,000  | 100 req/sec   | 500 req/sec   |
| Pro  | \$99/mo | 1,000,000      | 250,000 | 1,000 req/sec | 5,000 req/sec |

**Free tier locks** (return `402 plan_upgrade_required`):

* `POST /schema/.../attributes` — cannot create custom attributes
* `PATCH/DELETE /schema/.../attributes/{key}` — cannot modify or deprecate them
* `POST /custom-objects` — cannot define custom object types
* `POST /webhook-endpoints` — cannot register webhooks
* `POST /api-keys` when a second active key would be created — revoke the existing key first

**Overage on paid plans:** $1 per 10,000 API calls beyond cap, $0.50 per 1,000 records beyond cap, billed monthly.

**Idle pause:** Free workspaces with no agent call for 30 days flip to `is_active = false`. The next agent call returns `402 workspace_paused` with a hint to call `POST /workspaces/reactivate` (JWT-only).

## Upgrading + cancelling

The `/pricing` page in the admin web app branches on auth state:

* **Logged out** → marketing tier cards.
* **Logged in** → current plan + usage bars + Upgrade/Cancel buttons per tier.

Click **Upgrade to Solo**: you're redirected to Dodo Payments' hosted checkout. Once payment succeeds, your workspace is upgraded to the new tier and your next page load reflects the change.

Click **Cancel subscription**: your Dodo subscription is cancelled and your workspace returns to the **Free** plan at the end of the billing period.

The `/pricing` page and the upgrade/cancel actions are **exempt from the usage cap** — so a customer over their cap can always reach billing to upgrade or cancel.

## Hard caps

See [Concepts → Rate limits](/docs/concepts/rate-limits#hard-caps) for the full mechanics. In short: `PATCH /workspace {hard_cap_api_calls: 50000}` sets your own ceiling for the current calendar month, and the effective cap is the **lesser of** (plan cap, hard cap). The counter resets on the 1st. Over the cap, all agent traffic gets `429 cap_exceeded`; admin traffic stays unaffected so you can always raise the cap or upgrade.
