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

# Subscriptions

> Crypto subscription payments made easy

Set up and manage subscription payments using renewal reminders & charges (single-use checkout sessions), ideal for SaaS apps, Discord memberships, digital services, and more.

# How It Works

1. Create your [subscription payment](/docs/subscriptions.md#/setting-up-a-subscription) via the dashboard. Generate a shareable Pay Link or embed the Checkout Widget in your app.
2. Customers connect their wallet and provide their email during their first checkout. Use [webhooks](/reference/webhook/paylink-subscription/overview.md) and the [API](https://docs.hel.io/reference) to confirm and query subscriptions records (started, renewed, ended).
3. Each month, customers receive email reminders directing them to a [Charge](/reference/charge/overview.md#) page to renew with a single tap of their wallet. Users can also renew at any time from the [buyer dashboard](/docs/buyer-dashboard.md#/).

![](https://mintcdn.com/moonpay-commerce/qQmu63zyUpo0ecJa/images/docs/a6cb6423aaba6fb421701201c6ac2706c5c2b50235ff5841c51cac59bb8f2aab-Screenshot_2025-12-01_at_09.44.36.png?fit=max\&auto=format\&n=qQmu63zyUpo0ecJa\&q=85\&s=45ed82ce85a815cf403781396726aa47)

# Setting up a Subscription

Follow these steps to configure a Subscription in your dashboard:

1. [**Create a Pay Link**](https://docs.hel.io/docs/for-creators.md#create-payments)

* On the dashboard, navigate to **Create Payment** and select the **Subscription** template. You can also embed the Pay Link in your app as a Checkout Widget.

![](https://mintcdn.com/moonpay-commerce/qQmu63zyUpo0ecJa/images/docs/1c257540d06166d2840ae57198d507edfceac53faadde25547fea616cb3fc55b-ezgif-6b6953541438d2ca.gif?s=8d28b02f25d5af0bb56b3331e00d5511)

> [!NOTE]
>
> You can also create subscriptions via the API using the [Create a Pay Link endpoint](https://docs.hel.io/reference/paylink/create.md). Set `isSubscription: true` in `features` and define `subscriptionDetails`.

2. **Configure your Subscription Pay Link**

* **Billing Settings:** Choose between monthly or annual subscriptions. If you choose monthly you can also enable an optional annual discount.

![](https://mintcdn.com/moonpay-commerce/qQmu63zyUpo0ecJa/images/docs/aaa2c32bdc1eb542c13c300f4591f4f1d133be5a69c853847797415c3e2219c1-ezgif-61fd1c595c2c42f7.gif?s=9ef2da19799465af48cd6556b8401bc6)

* **Renewal Reminders:** Set the number of days before expiration to send renewal reminders. Customers will receive daily notifications until their subscription ends.
  * **Example:** If set to 3, users will receive reminders once per day for the last 3 days of their subscription before it expires.

![](https://mintcdn.com/moonpay-commerce/qQmu63zyUpo0ecJa/images/docs/e8d01432d75e26c4d5e3b91bb8cd5aa8fb7e3ed8b07f76128464f32d1f622d6c-Screenshot_2025-12-01_at_10.02.25.png?fit=max\&auto=format\&n=qQmu63zyUpo0ecJa\&q=85\&s=c0f749682570355eb3a89f0fe2fcd2b0)

* **Grace Period:** Define the number of extra days (if any) during which the customer can still make a payment. The customer’s renewal date remains unchanged. If no payment is made by the renewal date or within the grace period, the subscription will expire automatically.

# Managing and Tracking Subscriptions

Merchants have multiple ways to track and manage subscriptions on the platform:

1. [**Webhooks**](/reference/webhook/paylink-subscription/overview.md)

* Setup webhooks to receive real time notifications when a subscription starts, renews and ends.
* This enables you to automate subscription management and integrate it into your existing system.

2. [**API**](https://docs.hel.io/reference/getting-started.md)

* You can retrieve a specific subscription by querying its details via API, allowing you to check its status and other relevant information.
* You can also fetch all subscriptions under your account, providing an overview of active, expired, and canceled subscriptions.
* You can programatically create subscription pay links

3. [**Discord Memberships**](/docs/discord-memberships.md#/)

* The Discord bot assigns a role when a subscription starts and removes the role when a subscription ends.

# Cancelling Subscriptions

1. **Cancel and Individual Subscription**

* The subscription automatically expires when the user decides not to renew.

2. **Cancel All Subscriptions**

* Disable the Pay Link, which will prevent all users from renewing their subscriptions.

# Anonymous Subscriptions

You can disable email reminders and rely entirely on webhooks, allowing you to handle renewal notifications through your own in-app reminders or automated workflows.

**To set this up:**

1. **Create the Subscription Pay Link via API**

* [Create a pay link via API](https://docs.hel.io/reference/paylink/create.md) . In your request, set `"isSubscription": true` inside the features object, and include the subscriptionDetails object with relevant subscription configuration. To disable email reminders, set `"isAnonymous": true` inside the `subscriptionDetails` object.

```bash JSON theme={null}
"features": {
    "isSubscription": true
  }
```

```bash JSON theme={null}
"subscriptionDetails": {
    "renewalReminders": 2,
    "gracePeriod": 3,
    "annualDiscountBps": 10,
    "interval": "QUARTER",
    "isAnonymous": true
  }
```

2. **Create a Subscription Webhook**

* Once the subscription is created, set up a [subscription webhook](https://docs.hel.io/reference/webhook/paylink-subscription/create.md). Subscribe using config event names: `SUBSCRIPTION_STARTED`, `SUBSCRIPTION_RENEWED`, `SUBSCRIPTION_PENDING_PAYMENT`, and `SUBSCRIPTION_ENDED`.
* Delivered payloads use wire event names: `STARTED`, `RENEWED`, `ENDED`, or `SUBSCRIPTION_PENDING_PAYMENT`. See [Subscription payload reference](/reference/webhook/paylink-subscription/payloads.md) for full JSON shapes.
* Most subscription payloads include `nextChargeUrl` and `chargeToken` — the direct link to the buyer's payment page for the next renewal. These fields are omitted on `ENDED` events. You can use the charge URL to prompt the buyer within your own product or notification system. For example:

```bash JSON theme={null}
"nextChargeUrl": "https://app.hel.io/charge/7e75a4fb-32fd-4aa9-b787-b4ca04289932",
"chargeToken": "7e75a4fb-32fd-4aa9-b787-b4ca04289932"
```

Alternatively, the buyer can log into [moonpay.hel.io](https://moonpay.hel.io/) and access the Buyer Dashboard by toggling between the Merchant/Buyer Dashboard option at the top of the page.

You can view more about our webhooks in the [Webhook overview](/reference/webhook/overview.md) and [Subscription webhooks](/reference/webhook/paylink-subscription/overview.md).
