# Limits and what they mean

> Every allowance a Thalovant plan controls, what happens when you reach one, and how to change or cancel a plan.

Source: https://docs.thalovant.com/workspace/limits/

---
{/* Last Edit: Claude Opus 5.5 - 2026-09-28 - Motive: Point to the plan catalogue; Free intents and memory; memory_limit 409; withdrawal and cancellation link. */}

Every locked button in the console is one of the allowances below. This page
says what each one governs, so a refusal tells you something instead of just
stopping you.

**Your own numbers and the price of every plan are on
[Billing](/workspace/billing-and-plans/)** in the console. It shows each
allowance as *used of total*, with what remains, and what moving up would cost.
This page doesn't repeat any of it, because a number copied into documentation
is a number that goes out of date.

If you haven't signed up yet, [Billing and Plans](/workspace/billing-and-plans/#two-plan-lines)
compares the Home and Work plans. You can
still [try a public hub in your browser](https://dash.thalovant.com/explore)
for nothing, and the Free plan's allowance is below.

## How Limits Behave

Your actual limits are in Billing, as a used/total figure per allowance. At the limit, the action is refused and the message says which allowance is full; nothing that already exists stops working. For more room, change plan in Billing or free something you're not using. To stop paying, Billing → Manage billing opens the Stripe portal.

## What Each Allowance Governs

| Allowance | What it counts | You meet it when |
| --- | --- | --- |
| **Public hubs** | Private hub capacity available on your plan. | Creating one more hub than the plan carries. |
| **Runtime capacity** | Skill sets that can run private workspace workloads. | Adding a runtime group beyond the plan. |
| **Autoscaling hubs** | Hubs allowed to scale to paired workers. | Turning on autoscaling for one hub too many. |
| **Clients** | Client identities that can connect to public or workspace hubs. | Pairing one more device, app, or agent. |
| **Access policies** | Access-rule records available for workspace access control. | Creating another access rule. |
| **Monthly intents** | Questions answered across every client, per month. | Heavy shared use. Resets on a stated date. |
| **Daily intents** | The same, per day. A safety rail rather than a budget. | A runaway client or a load test. |
| **Custom domains** | Whether managed hub addresses can be mapped. | Not a count — either included or not. |
| **API tokens** | Active tokens, counted separately from clients. | Minting one more token than the plan allows. |

## On The Free Plan

| | Free |
| --- | --- |
| Connections | **1** |
| Active API tokens | **1** |
| Intents per day | **100** |
| Personal memory | **1** item |
| Public hubs | Browse and connect to any of them |
| Your own hubs | Not on this plan |

One connection means one device at a time. Rather than upgrade to pair a second
phone, you can move the connection you already have — the app offers that in a
tap, and it doesn't change the count.

## When You Reach One

The refusal names the allowance, the limit, and what you've used. It's an
HTTP `403` carrying `code`, `resource`, `limit`, `used` and `plan` beside the
sentence, so your own code can tell a plan limit apart from a fault:

```json
{
  "detail": "Free plan allows up to 1 connection.",
  "code": "plan_limit",
  "resource": "client",
  "limit": 1,
  "used": 1,
  "plan": "Free"
}
```

`resource` is one of `client`, `api_token`, `hub`, `runtime_group` or `acl`.

Memory is the one allowance with its own refusal. A second memory item on Free
answers HTTP `409` with the code `memory_limit`, and names Home as the upgrade;
see [Free Tier](/start/free-tier/#one-memory-item).

  Reaching a limit never stops what is already running. A hub that's answering
  keeps answering; a paired client stays paired. Only the new thing is refused.

## Changing Or Ending A Plan

Billing is handled through Stripe, so the plan, the payment method, the
invoices and the cancellation all live in one place.

1. **Open [Billing](/workspace/billing-and-plans/).** It shows the current plan
   and whether the subscription is active.
2. **Choose Manage billing.** This opens the Stripe customer portal for your
   workspace.
3. **Change or cancel there.** Invoices and payment methods are in the same
   portal.
4. **Come back to Billing** to confirm the limits the console shows now match
   what you chose.

To withdraw from a new contract within 14 days, or to cancel without signing
in, use [Withdraw or Cancel a Plan](/account/withdraw-and-cancel/); both send an
email receipt.

Cancelling ends the subscription. It doesn't delete your account or your data
— [Profile and security](/account/profile-security/) covers exporting your data
and deleting the account itself, which are separate and deliberate acts.

## Rate Limits Are Separate

Plan allowances count *things*. Token rate limits count *requests per minute*
and are covered in [API tokens](/account/api-tokens/). A 429 is a rate limit; a
403 with `code: plan_limit` is an allowance.
