> For the complete documentation index, see [llms.txt](https://docs.telys.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.telys.ai/licensing/managing-subscription.md).

# Manage subscription

Manage your Telys plan and billing in the **accounts portal at** [**accounts.thyn.ai**](https://accounts.thyn.ai), backed by the Stripe customer portal. Upgrades, monthly/yearly switches, card updates, downgrades, cancellations, and registered devices all happen there. Your local `telys` install picks up the change on its next license refresh.

## Before you start

* Sign in with **the same identity you use for `telys login`** — the portal, sign-in, and license share one account.
* Have a browser. Billing changes are confirmed in the browser, not the CLI.

## Manage your plan

{% stepper %}
{% step %}

#### Open the accounts portal

Go to [accounts.thyn.ai](https://accounts.thyn.ai) and sign in with the identity you used for `telys login` (the value of `$TELYS_ACCOUNTS_URL`, default `https://accounts.thyn.ai`).
{% endstep %}

{% step %}

#### Open billing

Open **Billing** to enter the Stripe customer portal, where subscription and payment changes are made.
{% endstep %}

{% step %}

#### Change the plan

Make the change you need:

* **Upgrade to Pro** — start a `telys_pro` subscription through live Stripe checkout ([telys.ai/pricing](https://telys.ai/pricing) has the current price).
* **Switch billing period** — move between monthly and yearly.
* **Update payment** — change the card on file or your billing details.
* **Downgrade or cancel** — return to `telys_developer` (free) or cancel the subscription; access continues until the current period ends.

For `telys_enterprise`, contact sales rather than self-serving — see [Plans & licensing](/licensing/tiers-and-pricing.md).
{% endstep %}

{% step %}

#### Review your devices

Review the devices registered to your account. Each appears by its device id; remove any you no longer use. Device limits depend on your tier — see [Seats & devices](/licensing/seats-and-devices.md).
{% endstep %}

{% step %}

#### Refresh the license on your machine

A billing change does not update a device instantly — each device carries a cached, signed license. Refresh it by signing in again on each machine:

```bash
telys login --plan telys_pro   # use the plan you now hold
telys runtime verify           # confirm the new tier verifies offline
```

{% endstep %}
{% endstepper %}

## Expected result

After these steps:

* The portal shows your new plan (for example, `telys_pro`, billed yearly) as active.
* Each machine you re-signed in on has a refreshed `~/.telys/login_license.jwt` carrying the new `tier`.
* `telys runtime verify` succeeds and reflects the updated tier.

Inspect the tier a machine holds from its cached license:

```python
from datetime import datetime, timezone
from pathlib import Path

from telys.verify import verify_license

token = Path.home().joinpath(".telys", "login_license.jwt").read_text().strip()
claims = verify_license(token, now=int(datetime.now(timezone.utc).timestamp()))
print(claims["products"]["telys"]["tier"])   # e.g. "telys_pro"
```

{% hint style="warning" %}
If a machine still shows the old tier, it has not refreshed yet. Run `telys login` again there. Until it refreshes, verification honors the previous license through its expiry and grace window — see [Offline licenses & verification](/licensing/offline-licenses.md).
{% endhint %}

{% hint style="info" %}
Downgrading or cancelling does not delete data. Your collections stay on-disk and local; only the tier the runtime reads changes. See [What leaves the machine](/security/what-leaves-the-machine.md).
{% endhint %}

## Next steps

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Seats &#x26; devices</strong></td><td>How device limits and per-device keys work.</td><td><a href="/pages/QId9O6LUKECM8BkqZLfg">/pages/QId9O6LUKECM8BkqZLfg</a></td></tr><tr><td><strong>Plans &#x26; licensing</strong></td><td>Compare plans before you change one.</td><td><a href="/pages/hGLr4vJ3ScfwXbJDIcyi">/pages/hGLr4vJ3ScfwXbJDIcyi</a></td></tr><tr><td><strong>License &#x26; login issues</strong></td><td>Fix a plan that will not refresh.</td><td><a href="/pages/f5D2AxbBcG8bokGMGJNZ">/pages/f5D2AxbBcG8bokGMGJNZ</a></td></tr></tbody></table>

Next: [Seats & devices](/licensing/seats-and-devices.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.telys.ai/licensing/managing-subscription.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
