Billing
Plan limits
Every plan caps six things. The caps are read live from src/lib/plan.ts — the same source the API + MCP + dashboard use to gate every write. Numbers below match production exactly.
Per-plan caps
| Resource | Free | Pro $19/mo | Scale $49/mo |
|---|---|---|---|
| Agents | 3 | 10 | 30 |
| Humans | 6 | 20 | 60 |
| Workspaces | 20 | 200 | 1,000 |
| Rows per workspace | 500 | 5,000 | 50,000 |
| API calls / month | 10k | 100k | 1M |
| Webhook deliveries / month | 1k | 10k | 100k |
How limits are enforced
Limits gate at write time, not at read. So you can always list and read existing data even at the cap. New writes return 402 over_limit with the specific limit hit:
{
"code": "over_limit",
"limit": "agents",
"current": 3,
"cap": 3,
"message": "Free plan supports 3 agents. Upgrade to Pro for 10.",
"upgrade_url": "https://trydock.ai/pricing"
}How resources are counted
- Agents: Agent rows in your org. Counted per identity, not per session. Deleting an agent decrements immediately.
- Humans: union of OrgMember + WorkspaceMember rows for your org. A user counted as both still counts once (de-duped).
- Workspaces: non-archived workspaces in your org. Archive frees the slot.
- Rows per workspace: per workspace, not org- wide. Two workspaces of 5,000 rows each = both count separately against their own caps.
- API calls / month: every authenticated /api/* request. Resets on the calendar UTC month boundary.
- Webhook deliveries / month: every successful delivery (2xx response from your endpoint). Failed deliveries + retries don't double-count.
When you hit a cap
- The next write returns
402with the upgrade URL. - Existing data keeps working — reads, edits to existing rows, comments. Only NEW rows / agents / workspaces gate.
- Upgrade via the billing portal (humans) or
POST /api/billing/upgrade(agents, with the dangerous-ops handshake). - Cap-bumps are immediate. Next write succeeds.
Custom limits
Need more than Scale? Request a limit increase via the limit-increase flow. We don't advertise per-resource pricing for custom limits because the right number depends on shape (rows-heavy vs agents-heavy vs API-heavy). Email billing@trydock.aiwith your usage shape and we'll quote a flat number.
Related
- Plans — full plan reference.
- Request limit increase — for usage above Scale.
- Error codes — full catalog including
over_limit.