---
updatedAt: 2026-06-17T20:59:51.000Z
agentTools:
  projectIndex: https://docs.clover.com/dev/llms.txt
---

# Recurring payments with plans and subscriptions

[block:html]
{
  "html": "<div class=\"container-top\"> \n  <!--North America-US and Canada-->\n  <div class=\"container-reg\">\n    <div class=\"pill-reg\">\n      <div class=\"label-reg\">North America—United States and Canada</div>\n    </div>\n  </div>\n</div>\n<!--syles in global css-->"
}
[/block]

[block:html]
{
  "html": "<!--2024-Feb-19 add new Video Table to present the video in this topic (DS-5933/5935) CD-->\n<!--2024-Feb-19 add note for ISVs re multi-pay tokens as an alternative to COF (DS-5925) CD-->\n<!--2025-March-3 [Aneesha] Reorganized the text and provided more specific info about Clover Ecommerce APIs and iframe for Recurring payments -->"
}
[/block]

The Clover recurring payments feature is supported by the Plan and Subscriptions APIs. Merchants and developers can set up automated, recurring charges at various intervals, including monthly and weekly. This supports both:

* **Fixed-term payments**—Ideal for installment plans, such as a six-month payment schedule.
* **Ongoing subscriptions**—Designed for continuous services, like streaming platforms. The Clover system automatically generates and processes invoices on the scheduled billing dates.

# Recurring payments configuration

Recurring payment configuration allows merchants to create plans and subscriptions.

* **Plans**—Use the Plans API to create multiple plans for merchants. You can define billing cycles and amounts for recurring payments.
* **Subscriptions**—Use the Subscriptions API to associate customers with specific plans, including billing details, start dates, and intervals.

# Get started

[block:html]
{
  "html": "<style>\n    .wrapper {\n      width: 90%;\n      display: flex;\n      flex-wrap: wrap;\n      gap: 10px;\n    }\n    .box {\n      flex: 1 1 calc(50% - 10px);\n      text-align: left;\n      margin-bottom: 4px;\n      overflow: hidden;\n      border: 1px solid #D8D8D8;\n      padding: 10pt;\n      box-sizing: border-box;\n      transition: box-shadow 0.3s ease;\n    }\n    .box:hover {\n      box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.4);\n    }\n    h2.g {\n         font-family: Altform, sans-serif;\n      font-size: 16px;\n      color: #228800;\n      margin: 2px 0 8px 0;\n    }\n    p.small-text {\n        font-family: Altform, sans-serif;\n      font-size: 15px;\n      color: #5A5A5A;\n    }\n    .btn {\n      border: none;\n      background-color: inherit;\n        font-family: Altform, sans-serif;\n      font-size: 14px;\n      color: #228800;\n      text-align: left;\n      cursor: pointer;\n      display: block;\n      margin-bottom: 4px;\n    }\n    .btn:hover {\n      color: #5D5D5D;\n    }\n    .btn a {\n      text-decoration: none;\n      color: inherit;\n    }\n    .btn::before {\n      content: \"➔ \";\n      color: #228800;\n    }\n\n    /* Responsive styles */\n    @media (max-width: 1200px) {\n      .box {\n        flex: 1 1 calc(33.333% - 10px);\n      }\n    }\n    @media (max-width: 768px) {\n      .box {\n        flex: 1 1 calc(50% - 10px);\n      }\n    }\n    @media (max-width: 480px) {\n      .box {\n        flex: 1 1 100%;\n      }\n    }\n  </style>\n\n<body>\n  <div class=\"wrapper\">\n    <div class=\"box\">\n      <h2 class=\"g\">Recurring payments API—Configure Plans</h2>\n      <p class=\"small-text\">Facilitates the creation and management of recurring payment plans for merchants, enabling them to offer subscription-based services to their customers. </p>\n      <button class=\"btn\"><a href=\"https://docs.clover.com/dev/docs/working-with-recurring-payments-and-subscriptions\">See the tutorial</a></button>\n      <button class=\"btn\"><a href=\"https://docs.clover.com/dev/reference/create\">Use the endpoint</a></button>\n    </div>\n    <div class=\"box\">\n      <h2 class=\"g\">Recurring payments API—Configure Subscription</h2>\n      <p class=\"small-text\">Allows merchants to create and manage subscriptions through their Clover Merchant Dashboard. You can use the Subscriptions API to create, retrieve, edit, and cancel and delete subscriptions.\n</p>\n      <button class=\"btn\"><a href=\"https://docs.clover.com/dev/docs/recurring-apis-subscriptions\">See the tutorial</a></button>\n      <button class=\"btn\"><a href=\"https://docs.clover.com/dev/docs/recurring-apis-subscriptions\">Use the endpoint</a></button>\n    </div>\n  </div>\n</body>\n</html>"
}
[/block]

***

# How it works

## Key features

* **Set the payment date**—Specify the date when a payment is sent.
* **Change the payment interval**—Adjust intervals after creating a plan. For example, a monthly payment starting on February 1 will continue on the 1st of each subsequent month.
* **Deactivate plans and subscriptions**—Cancel a plan or subscription without deleting it.

## Save card-on-file for customers

You can securely save a customer’s card details on file—with their consent—for scheduled or recurring payments. This process requires an OAuth token, `merchantId`,` customerId`, and a card token to be used as the `source`.

* **Generate card token to save COF**: You can generate card tokens in two ways:
  * **Clover Ecommerce APIs**—Generate an [OAuth token](https://docs.clover.com/dev/docs/generate-oauth-expiring-access-and-refresh-token) for authorization and a [PAKMS key](https://docs.clover.com/dev/docs/generate-ecommerce-api-key-or-pakms-key) to create a card token. This token is then used as the `source` when [saving a card-on-file (COF) record for a customer](https://docs.clover.com/dev/docs/save-a-card-for-future-transactions). This method offers flexibility but requires strict PCI DSS compliance.
  * **Clover iframe**—Embed a customizable [iframe](https://docs.clover.com/dev/docs/clover-iframe-integrations) into your app or ecommerce site to securely transmit card data directly to Clover servers. This approach significantly reduces the PCI compliance burden for merchants.
* **Automated notifications**—When a card-on-file is saved, the Clover automated notification system sends email and SMS alerts to the cardholder for upcoming charges, failed payments, and subscription renewals.
* **Card-on-file removal on request**—Cardholders can request deletion of their saved card data from Clover systems.
* **External token management**—If not using automated flows from Clover, you can manage multi-pay tokens and customer data externally, including customer profiles, stored credentials, and payment details. For more information. For more information, see [Use external multi-pay tokens with Clover Ecommerce APIs](https://docs.clover.com/dev/docs/use-transarmor-token).

## Quick steps to create recurring plans and subscriptions for the plans

| Step | Action                                                                                                                                                                                                                          | Endpoint/Dashboard                            | REST API used | Description                                                                                                                                                              |
| :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------- | :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1.   | [Generate a merchant-specific API token](https://docs.clover.com/dev/docs/create-ecommerce-api-tokens)  or [OAuth expiring `access_token`](https://docs.clover.com/dev/docs/generate-oauth-expiring-access-and-refresh-token) . | Merchant Dashboard                            | Platform      | Use the public and private keys to build a single merchant solution, or obtain an OAuth token for authorizing your app integration for multiple merchants or businesses. |
| 2.   | [Create a plan](https://docs.clover.com/dev/docs/working-with-recurring-payments-and-subscriptions#create-a-plan)                                                                                                               | `/recurring/v1/plans`                         | Platform      | Define a plan with a billing cycle and amount for a merchant.                                                                                                            |
| 3.   | [Generate an Ecommerce API key (PAKMS key)](https://docs.clover.com/dev/docs/generate-ecommerce-api-key-or-pakms-key)                                                                                                           | `/getapikey`                                  | Ecommerce     | Use the Ecommerce API token to generate a PAKMS key to identify the merchant during card tokenization.                                                                   |
| 4.   | [Create a card token](https://docs.clover.com/dev/docs/create-a-card-token)                                                                                                                                                     | `/v1/tokens`                                  | Ecommerce     | Generate a card token using customer card details to use as the `source` to create a card-on-file (COF).                                                                 |
| 5.   | [Save a card-on-file (COF)](https://docs.clover.com/dev/docs/save-a-card-for-future-transactions#use-customer-id) for a customer.                                                                                               | `/v1/customers`                               | Ecommerce     | Save the card token to the customer's profile. This is used as the `source` to charge the subscription.                                                                  |
| 6.   | [Create a subscription](https://docs.clover.com/dev/docs/recurring-apis-subscriptions#create-a-subscription)                                                                                                                    | `/recurring/v1/plans/ {planId}/subscriptions` | Platform      | Create a subscription associating the customer with the plan.                                                                                                            |

## Restrictions

Recurring payment configurations and related APIs are not available for Health Insurance Portability and Accountability Act (HIPAA) merchants.

***

# Watch video: Recurring payments

[block:html]
{
  "html": "<div class=\"vt\">\n   <table class=\"vt\">\n     <colgroup>\n      <col id=\"first\">\n      <col id=\"second\">\n      </colgroup>\n          <thead>\n            <tr class=\"table-head\">\n              <th class=\"table-head\">Watch</th>\n              <th class=\"table-head\">Learn</th>\n            </tr>\n          </thead>\n          <tbody>\n <!--1st body Row-->\n            <tr class=\"table-content\">\n <!--1st cell-->\n              <td class=\"table-content\">\n                <p class=\"table-content\" style=\"text-align:center;\"></p>\n      <div style=\"clear: both;padding: 2px;text-align:center;\">\n        <iframe id=\"myiframe100p\" \n        src=\"https://www.youtube.com/embed/6_lA5Wa4YCs\"\n        title=\"Clover Recurring Payments APIs\" \n        frameborder=\"0\" \n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; \n               gyroscope; picture-in-picture; web-share\" \n        allowfullscreen>\n      </iframe>\n       </div>\n         </td>\n <!--2nd cell-->\n          <td class=\"table-content\">\n<p class=\"table-content\">In this video, learn:</p>\n    <ul class=\"table-content\">\n      <li>How to define, create, edit and delete plans for recurring payments.</li>\n      <li>How to create subscriptions for plans.</li>\n    </ul>\n         </td>\n          </tr>\n <!--end 1st body Row-->\n</table> </div>\n\n<!--=========================================================-->\n<!--related styles are in HTML block at the bottom of the page-->"
}
[/block]

***

[block:html]
{
  "html": "<style>\n/*==============================*/  \n/*== 5-col table width styles ==*/\n/*==============================*/\n    table th:first-of-type {\n        width: 5%;\n    }\n    table th:nth-of-type(2) {\n        width: 30%;\n    }\n    table th:nth-of-type(3) {\n        width: 25%;\n    }\n    table th:nth-of-type(4) {\n        width: 10%;\n    }\n    table th:nth-of-type(5) {\n        width: 35%;\n    }\n\n/*==============================*/  \n/*== General and Video Table (vt) styles ==*/\n/*==============================*/\n*,\n*::before,\n*::after {\n  box-sizing: border-box; \n}\n\n/*== Video Table (vt) sample styles ==*/\n  \n/*video table (vt) size based on percentage of container*/\ndiv.vt {width:100%; overflow:auto;}\ntable.vt, td.vt {border:1px solid #000;}\n#first {width:30%;}\n#second {width:60%;}\n\ntr.table-head th.table-head /*background-color table header row*/ {\n\tbackground-color: #280;\n  margin-block-start: 1em;\n  color: #fff;\n  margin-top: 0px;\n\tfont-size: 1.4em;\n\tfont-weight: 500;\n  overflow-wrap: normal;\n  word-break: normal;\n}\n\ntd.table-head {\n  margin-block-start: 1em;\n  color: #fff;\n\tpadding: 10px;\n\tmargin-top: 0px;\n\tfont-size: 1.4em;\n\tfont-weight: 500;\n  overflow-wrap: normal;\n  word-break: normal;\n}\n\ntr.table-content {\n  vertical-align: top;\n}\n\ntd.table-content {\n  vertical-align: top !important;\n  margin-block-start: 1em;\n}\n\np.table-title {\n\tcolor: #fff;\n\tpadding: 10px;\n\tmargin-top: 0px;\n\tfont-size: 1.4em;\n\tfont-weight: 500;\n  overflow-wrap: normal;\n  word-break: normal;\n}\n  \np.table-content {\n\tpadding-left: 4%;\n\tpadding-right: 4%;\n  overflow-wrap: normal;\n  vertical-align: top;\n  margin-block-start: 1em;\n}\n\nul.table-content {\n  margin-block-start: 1em;\n}\n\n/*== iframe sample sizes ==*/  \n  \n/*iframe size based on percentage of container*/\n#myiframe100p {\n    width: 100%;\n    height: 100%;\n}\n#myiframe90p {\n    width: 90%;\n    height: 100%;\n}\n#myiframe75p {\n    width: 75%;\n    height: 75%;\n}\n#myiframe60p {\n    width: 60%;\n    height: 60%;\n}\n#myiframe50p {\n    width: 50%;\n    height: 50%;\n}\n</style>"
}
[/block]