--- title: "Recurring payments with Pix" description: "Offer recurring payments to your shoppers with our Pix Automático integration." url: "https://docs.adyen.com/payment-methods/pix/recurring-payments" source_url: "https://docs.adyen.com/payment-methods/pix/recurring-payments.md" canonical: "https://docs.adyen.com/payment-methods/pix/recurring-payments" last_modified: "2024-03-25T16:08:00+01:00" language: "en" --- # Recurring payments with Pix Offer recurring payments to your shoppers with our Pix Automático integration. [View source](/payment-methods/pix/recurring-payments.md) ![](/user/pages/docs/08.payment-methods/72.pix/16.recurring-payments/pix.svg?decoding=auto\&fetchpriority=auto)  **Read more** Learn more about [Pix Automático](https://www.bcb.gov.br/detalhenoticia/699/noticia). You can accept [subscription payments](/online-payments/tokenization/#recurring-payment-types) with Pix, also known as Pix Automático. Pix Automático lets you choose from various billing cycles, and fixed or variable recurring amounts. It also allows you to retry failed subscription payments. ## Requirements Before you begin, take into account the following requirements, limitations, and preparations. | Requirement | Description | | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | Make sure that you have built an [API-only](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only\&version=latest) integration using Checkout API v49 or later. | | **[Webhooks](/development-resources/webhooks)** | Subscribe to the following webhook(s):- Standard webhooks - [Recurring tokens life cycle events](/development-resources/webhooks/webhook-types#other-webhooks) webhook | | **Limitations** | * Recurring Pix payments are only available for the **Subscription** [recurring processing model](/online-payments/tokenization/#recurring-payment-types). | | **Setup steps** | Before you begin:* [Add Pix in your Customer Area](/payment-methods/add-payment-methods/). * Integrate with [Pix for API only](/payment-methods/pix/api-only/). | ## Authorization flows for subscription payments You can offer two types of recurring payment flows: * **Authorization with QR code**: Set up a subscription payment to bill shoppers regularly, where an initial payment is not required. This flow is ideal for setting up trial subscriptions. The Brazilian Central Bank refers to this flow as **Journey 2**. * **Authorization and payment with QR code**: Set up a subscription payment to bill shoppers regularly, and charge them. This flow is ideal for subscriptions that require an initial payment to start, or when combining a one-off purchase with signing up to a subscription service. The Brazilian Central Bank refers to this flow as **Journey 3**. ## How it works The recurring payment flow with Pix works as follows: 1. You make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request to: * Specify the frequency, amount, and other details for a subscription. * If you are using the **Authorization and payment (Journey 3)** flow, make an initial payment for the subscription, or for a one-off purchase. 2. You show a QR code or QR code data for the shopper to copy, using the `action` object you receive in the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response. 3. After the shopper confirms their subscription, you get the confirmation that the token is created in a [Recurring tokens lifecycle events webhook](/online-payments/tokenization/managing-tokens#webhooks). * If you are using the **Authorization and payment (Journey 3)** flow, you also get an [AUTHORISATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/AUTHORISATION) webhook that informs you of the outcome of the immediate transaction. 4. Before the expected billing date, you make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request to charge the shopper for the subscription. 5. After the billing date, you get a [CAPTURE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/CAPTURE) webhook that informs you of the payment result. If a subscription payment fails, we notify you in a [CAPTURE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/CAPTURE), or [EXPIRE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/EXPIRE) webhook. You can [retry the payment](#retry-a-recurring-payment) up to three times. ## Create a token with a billing plan We strongly recommend that you ask explicit permission from the shopper if you intend to make future recurring payments. Being transparent about the payment schedule and the charged amount reduces the risk of chargebacks. To set up a billing plan for a shopper, you need to store their payment details and specify the details of the subscription. If you are using the **Authorization and payment** [flow](#flows), you make one request that combines the one-off payment and the billing plan setup. 1. Make a **POST** [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request. In your request, include: * **Standard tokenization parameters**: | Parameters | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `paymentMethod.type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **pix** | | [shopperReference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperReference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique identifier for the shopper. Minimum length: three characters. This field is case-sensitive.Do not include personally identifiable information (PII), such as name or email address. | | [shopperInteraction](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperInteraction) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **Ecommerce**. | | [recurringProcessingModel](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-recurringProcessingModel) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **Subscription**. | | [storePaymentMethod](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-storePaymentMethod) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **true** to store the shopper's payment details for future recurring payments. | | [amount](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-amount) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The `currency` and `value` of the payment, in [minor units](/development-resources/currency-codes/). Set the `amount.value` field depending on your [authorization flow](#flows):- **Authorization with QR code (Journey 2)**: Set to **0** to validate the payment details with a [zero-auth](/get-started-with-adyen/adyen-glossary/#zero-value-auth) transaction before processing payments. - **Authorization and payment with QR code (Journey 3)**: Set to the payment amount for the immediate payment. | * **Pix-specific parameters**: | Parameters | Required | Description | | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [shopperName](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperName) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The first and last name of the shopper. | | [socialSecurityNumber](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-socialSecurityNumber) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's CPF or CNPJ number. This will be shown to the shopper on the Pix payment form. | | `paymentMethod.pixRecurring.frequency` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The frequency at which the shopper will be charged. Possible values: **weekly**, **monthly**, **quarterly**, **half-yearly**, and **yearly**. | | `paymentMethod.pixRecurring.recurringStatement` | | The text that that will be shown on the shopper's bank statement for the recurring payments. We recommend to add a descriptive text about the subscription to let your shoppers recognize your recurring payments. Maximum length: 35 characters. | | `paymentMethod.pixRecurring.minAmount` | | For a billing plan where the payment amounts are variable, the `currency` and `value` of the minimum amount to charge the shopper for each recurring payment, in [minor units](/development-resources/currency-codes/). When a shopper approves the billing plan, they can also specify a maximum amount in their banking app. | | `paymentMethod.pixRecurring.recurringAmount` | | For a billing plan where the payment amount is fixed, the `currency` and `value` for each recurring payment, in [minor units](/development-resources/currency-codes/). | | `paymentMethod.pixRecurring.startsAt` | | Start date of the billing plan, in **YYYY-MM-DD** format. The default value is the transaction date. | | `paymentMethod.pixRecurring.endsAt` | | End date of the billing plan, in **YYYY-MM-DD** format. The end date must align with the frequency and the start date of the billing plan. If left blank, the subscription will continue indefinitely unless it is [cancelled](#cancel-a-billing-plan) by the shopper. | | `paymentMethod.pixRecurring.retryPolicy` | | When set to **true**, you can [retry](#retry) for failed recurring payments. The default value is **true**. | **Set up a billing plan with a fixed amount** ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "amount": { "currency": "BRL", "value": 100000 }, "reference": "YOUR_PAYMENT_REFERENCE", "paymentMethod": { "type": "pix", "pixRecurring": { "recurringStatement": "YOUR_BILLING_STATEMENT", "recurringAmount": { "currency": "BRL", "value": 10000 }, "frequency": "monthly", "startsAt": "2025-08-01", "endsAt": "2025-12-01", "retryPolicy": "true" } }, "shopperName": { "firstName": "John", "lastName": "Smith" }, "shopperReference": "YOUR_SHOPPER_REFERENCE", "shopperInteraction": "Ecommerce", "recurringProcessingModel": "Subscription", "storePaymentMethod": "true", "socialSecurityNumber": "01234567890" }' ``` The response contains the following data: * [`resultCode` ](/online-payments/build-your-integration/payment-result-codes/): informs you about the status of subscription setup and the payment. * `action`: contains the `qrCodeData`. 2. From the response, use the `action` field that contains the `qrCodeData` to [render the QR code or present the QR code data](/payment-methods/pix/api-only/#present-qr-code). 3. Wait for the following [webhooks](/development-resources/webhooks) to get: * The outcome of your request. * The `storedPaymentMethodId` that you need to include in subsequent recurring payment requests. | Webhook | Description | | ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | | [AUTHORISATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/AUTHORISATION) | Informs you whether the amount for the immediate payment is authorized. | | [recurring.token.created](https://docs.adyen.com/api-explorer/Tokenization-webhooks/latest/post/recurring.token.created) | Contains the `shopperReference`, and the `storedPaymentMethodId`. | If you need to make changes to a billing plan after setting it up, you have to [cancel the billing plan](#cancel-a-billing-plan), and create a new one. ## Make recurring payments Make a request for the recurring payment within a period of ten to two days before the billing date. This is called the schedule window. For example, if the expected billing date is August 12, 2025, you can make the request between August 02 and August 10 to schedule the payment. 1. Make a **POST** [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, including: | Field | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `paymentMethod.type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **pix** | | `paymentMethod.storedPaymentMethodId` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The token for the shopper's stored payment details. This is the `storedPaymentMethodId` from the [recurring.token.created](https://docs.adyen.com/api-explorer/Tokenization-webhooks/latest/post/recurring.token.created) webhook. | | [amount](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-amount) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The `currency` and `value` of the recurring payment, in [minor units](/development-resources/currency-codes/).- If you included the `recurringAmount` field when you [created the billing plan](#create-token-with-billing-plan), the amount must match the one in your initial request to create the token. - If you included the `minAmount` field when you [created the billing plan](#create-token-with-billing-plan), you can set a new amount. | | [shopperReference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperReference) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique identifier for the shopper. Must be the same one you included with the [request to create the token with a billing plan](#create-token-with-billing-plan). | | [shopperInteraction](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-shopperInteraction) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **ContAuth**. | | [recurringProcessingModel](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-recurringProcessingModel) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **Subscription**. | | `paymentMethod.pixRecurring.billingDate` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The date on which the shopper's payment method will be charged, in **YYYY-MM-DD** format. | | `paymentMethod.pixRecurring.businessDayOnly` | | When set to **true**, if the `billingDate` is not a business day, the payment will be processed on the next business day. The default value is **false**. | **Make a recurring payment** ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "amount": { "currency": "BRL", "value": 100000 }, "reference": "YOUR_PAYMENT_REFERENCE", "paymentMethod": { "type": "pix", "storedPaymentMethodId": "M5N7TQ4TG5PFWR50", "pixRecurring": { "billingDate": "2025-08-01" } }, "shopperReference": "YOUR_SHOPPER_REFERENCE", "shopperInteraction": "ContAuth", "recurringProcessingModel": "Subscription" }' ``` After you make the request to schedule the payment, the response contains: * [`resultCode` ](/online-payments/build-your-integration/payment-result-codes/): **Pending**. 2. When the payment scheduling is confirmed, you receive an [AUTHORISATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/AUTHORISATION) webhook. If you receive: * `success`: **true**, the payment is successfully scheduled, and the shopper will be charged for the subscription on the billing date you specified. * `success`: **false**, the payment was not successfully scheduled. This can happen when: * The amount in the request does not match the amount you specified when you [created the billing plan](#create-token-with-billing-plan). * A payment was already scheduled for this billing cycle. * The request to schedule was not sent during the [schedule window](#make-recurring-payments). * The details in your request to schedule does not match a successfully created [billing plan](#create-token-with-billing-plan). 3. After the billing date you specified in the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, wait for a webhook to learn about the outcome of the subscription transaction. | Webhook | `success` | Description | | --------------------------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [CAPTURE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/CAPTURE) | **true** | The shopper was successfully charged for the subscription. | | [CAPTURE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/CAPTURE) | **false** | Adyen received a notification from the shopper's bank that the subscription payment failed. Save the `pspReference` from this webhook to [retry](#retry) the payment. | | [EXPIRE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/EXPIRE) | **true** | The subscription amount was not captured, and Adyen did not receive any notification from the shopper's bank. Save the `pspReference` from this webhook to [retry](#retry) the payment. | ## Retry a recurring payment If you receive one of the following after the billing date, you can retry the payment up to three times: * [CAPTURE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/CAPTURE) webhook with `success`: **false** * [EXPIRE](https://docs.adyen.com/api-explorer/Webhooks/latest/post/EXPIRE) webhook You can only retry recurring payments if the `paymentMethod.pixRecurring.retryPolicy` was enabled in your request to [create the billing plan](#create-token-with-billing-plan). To retry a recurring payment, copy your [failed recurring payment request](#make-recurring-payments), including: * The same fields you used in your first recurring payment request. Make sure that the `amount` in your retry request is the same as the `amount` from the failed recurring payment request. * A new `paymentMethod.pixRecurring.billingDate`: * Must be at least 24 hours later than when you are making the request. * Must be within seven days from the billing date of the failed recurring payment. * `paymentMethod.pixRecurring.originalPspReference`: The [pspReference](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-pspReference) for the failed recurring payment. Find this in **CAPTURE**, or **EXPIRE** webhook you received after the billing date. **Retry a recurring payment** ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "amount": { "currency": "BRL", "value": 100000 }, "paymentMethod": { "type": "pix", "storedPaymentMethodId: "M5N7TQ4TG5PFWR50", "pixRecurring": { "billingDate": "2025-08-05", "originalPspReference": "JDD6LKT8MBLZNN84" }, "shopperReference": "YOUR_SHOPPER_REFERENCE", "shopperInteraction": "ContAuth", "recurringProcessingModel": "Subscription" }' ``` ## Cancel a billing plan If your shopper wants to end their billing plan, you need to cancel the billing plan generated for their stored payment details on your side. [Delete the token](/online-payments/tokenization/managing-tokens/#delete-stored-details) with a **DELETE** [/storedPaymentMethods/{storedPaymentMethodId}](https://docs.adyen.com/api-explorer/Checkout/latest/delete/storedPaymentMethods/\(storedPaymentMethodId\)) request. Shoppers can also request to cancel the billing plan from their bank. In these cases, Adyen deletes the token on your behalf. It is still your responsibility to make sure any remaining shopper details are deleted from your servers, after payment details stored with Adyen are deleted. When a token is deleted, you receive a `recurring.token.disabled` webhook. ## Refund or cancel a recurring payment You can refund a recurring payment within 90 days after the payment in the [Customer Area](/account/manage-payments/#refund-a-payment) or with an [API request](/online-payments/refund). You can only [refund a payment after it is captured](/online-payments/refund/#refund-cancel-or-reverse-a-payment). If you have already [scheduled a payment](#make-recurring-payments), but the payment is not captured yet, you can [cancel the payment](/online-payments/cancel/). Cancellations must be made before 10 PM on the day before the scheduled date. To make things easier for you and allow more flexibility in the way you manage cancels and refunds, we recommend to use the [reversal flow](/online-payments/reversal). ## See also * [Pix API only](/payment-methods/pix/api-only/) * [Tokenization](/online-payments/tokenization)