---
title: "Recurring card payments in India"
url: "https://docs.adyen.com/payment-methods/cards/cards-recurring-india"
source_url: "https://docs.adyen.com/payment-methods/cards/cards-recurring-india.md"
canonical: "https://docs.adyen.com/payment-methods/cards/cards-recurring-india"
last_modified: "2021-05-04T10:41:00+02:00"
language: "en"
---

# Recurring card payments in India

[View source](/payment-methods/cards/cards-recurring-india.md)

You need to process transactions via local acquiring to support the recurring flows described on this page. Reach out to your Account Manager or our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to evaluate if and how you can process locally with Adyen.

You can accept recurring card payments in India for the following types of payments:

* **Subscriptions**: A recurring transaction made at regular intervals for a product or a service. These payments use the **Subscription** [recurring processing model](/online-payments/tokenization/make-token-payments#make-a-subscription-or-unscheduled-card-on-file-payment).
* **Automatic top-ups**: Contracts that occur on a non-fixed schedule using stored card details. This includes automatic top-ups when the cardholder's balance drops below a certain amount. These payments use the **UnscheduledCardOnFile** [recurring processing model](/online-payments/tokenization/make-token-payments#make-a-subscription-or-unscheduled-card-on-file-payment).

To process recurring card payments in India, you need to perform some extra steps:

* You provide information about the shopper's billing plan in the payments request.
* Based on this information, the shopper creates a mandate between them and their issuer.
* You initiate a pre-debit notification before you charge the shopper.

## How it works

The instructions on this page describe the requests and responses using Checkout API

v66

or earlier. You can use Checkout API

v67

or later, but note that there are some differences in the 3D Secure flow. For more information, see the [release notes](/online-payments/release-notes).

Set up a recurring contract and a mandate:

1. In your payment form, a shopper selects their card and fills in their details.
2. You send a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying the required details to [set up a recurring contract and mandate](#set-up-mandate).
3. The shopper is redirected to the issuer and performs 3D Secure 2 authentication.
4. The shopper is redirected back to your website.
5. You send a [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) request, and include the data that you received in the /payments response.
6. You get a response from the /payments/details request. When the result is successful, the mandate is created and you can start processing recurring **Subscription** or **UnscheduledCardOnFile** payments for your shoppers.

Use the recurring contract to make a payment:

1. [Notify the issuer](#send-a-pre-debit-notification) that you will charge the shopper. We recommend that you do this at least 72 hours before you intend to charge the shopper.
2. At least 24 hours before the recurring charge, the issuer sends the shopper a pre-debit notification that the recurring amount will be charged. To send a notification to the shopper, the issuer can use an SMS, or an e-mail, for example.
3. You send a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying the required details to [make a recurring payment](#make-a-subscription-payment).

## Set up a recurring contract

To start a recurring contract for a shopper, you need to store their payment details and create a mandate with their issuer. The issuer uses this mandate to have visibility of the shopper's recurring payments. They can then let the shopper cancel (or pause/unpause) the mandate on their side.

In the examples on this page, you set up a subscription for a shopper.

Make sure that every billing plan has a unique mandate associated with it.

### Make a payment

Make a POST [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) call, including:

| Field                                 | Required                                                                                    | Description                                                                                                                                                                                                                                                   |
| ------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `paymentMethod.type`                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **scheme**                                                                                                                                                                                                                                                    |
| `paymentMethod.encryptedCardNumber`   | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's encrypted card number.                                                                                                                                                                                                                          |
| `paymentMethod.encryptedExpiryYear`   | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's encrypted card expiry year.                                                                                                                                                                                                                     |
| `paymentMethod.encryptedExpiryMonth`  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's encrypted card expiry month.                                                                                                                                                                                                                    |
| `paymentMethod.encryptedSecurityCode` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's encrypted card CVC.                                                                                                                                                                                                                             |
| `paymentMethod.holderName`            | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The name on the shopper's card.                                                                                                                                                                                                                               |
| `mandate.amount`                      | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The amount the shopper will be charged per recurring debit in minor units. Must be more than or equal to the transaction amount. The recurring charge does not need to go through 3D Secure authentication if the amount is less than or equal to INR 15,000. |
| `mandate.amountRule`                  |                                                                                             | Possible values: **max** (default) and **exact**.- **max** - The shopper can be charged any amount between INR 1 to the amount in the `amount` field.
- **exact** - The shopper can only be charged the amount in the `amount` field.                         |
| `mandate.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: **monthly** and **adhoc**.                                                                                                                                                               |
| `mandate.startsAt`                    |                                                                                             | Start date of the billing plan, in **YYYY-MM-DD** format. The default value is the transaction date.                                                                                                                                                          |
| `mandate.endsAt`                      | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | End date of the billing plan, in **YYYY-MM-DD** format.                                                                                                                                                                                                       |
| `mandate.remarks`                     |                                                                                             | Limited to 50 characters, no special characters.                                                                                                                                                                                                              |
| `browserInfo`                         |                                                                                             | The shopper's browser information.                                                                                                                                                                                                                            |
| `shopperEmail`                        |                                                                                             | The shopper's email address.                                                                                                                                                                                                                                  |
| `shopperIP`                           |                                                                                             | The shopper's IP address.                                                                                                                                                                                                                                     |
| `storePaymentMethod`                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **true** to store shopper's payment details.                                                                                                                                                                                                           |
| `shopperInteraction`                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **Ecommerce**.                                                                                                                                                                                                                                         |
| `recurringProcessingModel`            | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Possible values: **Subscription** or **UnscheduledCardOnFile**.                                                                                                                                                                                               |
| `shopperReference`                    | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper reference associated with the billing plan (minimum length three characters).                                                                                                                                                                     |

The details in the `mandate` object are used to create the mandate for the shopper's billing plan.

**/payments request**

```json
curl https://checkout-test.adyen.com/v72/payments \
-H 'x-api-key: ADYEN_API_KEY' \
-H 'content-type: application/json' \
-d '{
  "amount": {
    "currency": "INR",
    "value": 9000
  },
  "countryCode": "IN",
  "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
  "reference": "YOUR_ORDER_NUMBER",
  "paymentMethod": {
    "type": "scheme",
    "encryptedCardNumber": "adyenjs_0_1_18$k7s65M5V0KdPxTErhBIPoMPI8HlC..",
    "encryptedExpiryYear": "adyenjs_0_1_18$CkCOLYZsdqpxGjrALWHj3QoGHqe+..",
    "encryptedExpiryMonth": "adyenjs_0_1_18$p2OZxW2XmwAA8C1Avxm3G9UB6e4..",
    "encryptedSecurityCode": "adyenjs_0_1_24$XUyMJyHebrra/TpSda9fha978+..",
    "holderName": "S. Hopper"
  },
  "mandate":{
      "amount": "100000",
      "amountRule": "max",
      "frequency": "monthly",
      "startsAt": "2021-02-16",
      "endsAt": "2022-02-16",
      "remarks": "Remark on mandate"
  },
  "browserInfo": {
        "acceptHeader": "*/*",
        "userAgent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36"
  },
  "shopperEmail": "s.hopper@example.com",
  "shopperIP": "127.0.0.1",
  "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
  "storePaymentMethod": true,
  "shopperInteraction": "Ecommerce",
  "recurringProcessingModel": "Subscription",
  "shopperReference": "YOUR_SHOPPER_REFERENCE"
}'
```

The [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response is:

**/payments response**

```json
{
   "resultCode":"RedirectShopper",
   "action":{
      "data":{
         "MD":"OEVudmZVMUlkWjd0MDNwUWs2bmhSdz09...",
         "PaReq":"eNpVUttygjAQ/RXbDyAXBYRZ00HpTH3wUosPfe...",
         "TermUrl":"https://your-company.example.com/checkout?shopperOrder=12xy.."
      },
      "method":"POST",
      "{hint: Store this on your server.}paymentData{/hint}":"Ab02b4c0!BQABAgCJN1wRZuGJmq8dMncmypvknj9s7l5Tj...",
      "paymentMethodType":"scheme",
      "type":"redirect",
      "url":"ISSUER_URL"
   },
   "details":[
      {
         "key":"MD",
         "type":"text"
      },
      {
         "key":"PaRes",
         "type":"text"
      }
   ],
   ...
}
```

The response contains an `action` object. Your next step is to [Handle the redirect](#handle-the-redirect-web).

### Handle the redirect

Handling the redirect is similar to handling a regular [3D Secure redirect](/online-payments/3d-secure/redirect-3ds2), but with a few differences for recurring card payments in India:

* **Testing**\
  To test the 3D Secure 2 authentication flow, you can use a test card and static One Time Password (OTP) from the [Test and go live](#test-and-go-live) section.
* **Mandate details returned in the response**\
  You will receive the mandate details as additional data in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response.

For more detailed information about handling the redirect in the different integration types, see:\
[Web Drop-in](/online-payments/3d-secure/redirect-3ds2/web-drop-in#handle-the-redirect)\
[Web Component](/online-payments/3d-secure/redirect-3ds2/web-component/#step-4-handle-the-redirect-result)\
[iOS Drop-in](/online-payments/3d-secure/redirect-3ds2/ios-drop-in#handle-the-redirect-result)\
[iOS Component](/online-payments/3d-secure/redirect-3ds2/ios-component#handle-the-redirect)\
[Android Drop-in](/online-payments/3d-secure/redirect-3ds2/android-drop-in#check-the-payment-result)\
[Android Component](/online-payments/3d-secure/redirect-3ds2/android-component#handle-the-redirect)\
[API only](/online-payments/build-your-integration/advanced-flow/?platform=Web\&integration=API%20only#handle-the-redirect)

If the payment was successful, the shopper created the mandate with their issuer, and you will get a [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response with:

* `resultCode`: **Authorised**

* `additionalData.tokenization.storedPaymentMethodId`: The token for the saved payment details. You will need this to make future payments for the shopper.

* `additionalData.mandate`: The details on the shopper's mandate. This contains the mandate details that you provided in your request, as well as:

  * `mandate.mandateId`: This field will include the identifier for the mandate created by the issuer. Currently, this is a placeholder field and we return an empty string as the value. When issuers start passing the `mandateId`, we will return the value in this field.
  * `mandate.providerId`: The ID returned by the provider.
  * `mandate.status`: The status of the mandate.
  * `mandate.txVariant`: The transaction variant.

* `pspReference`: Our unique identifier for the transaction.

**Example /payments/details response**

```json
{
    "additionalData": {
        "cvcResult": "0 Unknown",
        "authCode": null,
        "avsResult": "0 Unknown",
        "tokenization.storedPaymentMethodId": "9915989424854370",
        "tokenization.shopperReference": "YOUR_SHOPPER_REFERENCE",
        "tokenization.store.operationType": "created",
        "refusalReasonRaw": "MD000: Request successful",
        "mandate.amount" : "1000.00",
        "mandate.amountRule" : "max",
        "mandate.currency" : "INR",
        "mandate.frequency" : "monthly",
        "mandate.startsAt" : "2020-02-16 00:00:00",
        "mandate.endsAt" : "2022-02-16 00:00:00",
        "mandate.remarks" : "Remark on mandate",
        "mandate.mandateId" : "",
        "mandate.providerId" : "PROVIDER_ID",
        "mandate.status" : "active",
        "mandate.txVariant" : "TX_VARIANT",
        "acquirerCode": "ACQUIRER_CODE",
        "acquirerReference": "ACQUIRER_REFERENCE",
        ...
      },
      "pspReference": "8826006786035918",
      "resultCode": "Authorised",
      "amount": {
        "currency": "INR",
        "value": 9000
      },
      "merchantReference": "YOUR_ORDER_NUMBER"
}
```

You will need the `storedPaymentMethodId` and `shopperReference` to make subsequent payments.

### Present the payment result

Use the  [resultCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-resultCode) from the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response to present the payment result to your shopper. You will also receive the outcome of the payment asynchronously in a [webhook](/development-resources/webhooks).

You can receive the following `resultCode` values:

| resultCode     | Description                                                                                                                                               | Action to take                                                                                                  |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Authorised** | The payment was successful, and a mandate was created.                                                                                                    | Inform the shopper that the payment has been successful.                                                        |
| **Cancelled**  | The shopper cancelled the payment.                                                                                                                        | Ask the shopper whether they want to continue with the order, or ask them to select a different payment method. |
| **Error**      | There was an error when the payment was being processed. For more information, check the [`refusalReason` ](/development-resources/refusal-reasons)field. | Inform the shopper that there was an error processing their payment.                                            |
| **Refused**    | The payment was refused. For more information, check the [`refusalReason` ](/development-resources/refusal-reasons)field.                                 | Ask the shopper to try the payment again using a different payment method.                                      |

### Webhook

You will receive a [webhook](/development-resources/webhooks) message with the final status of the payment.

| eventCode         | success field | Description                                                                | Action to take                                                                                                       |
| ----------------- | ------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| **AUTHORISATION** | **false**     | The transaction failed.                                                    | Cancel the order and inform the shopper that the payment failed and any amount debited will be refunded in 2-3 days. |
| **AUTHORISATION** | **true**      | The shopper successfully completed the payment, and a mandate was created. | Inform the shopper that the payment has been successful and proceed with the order.                                  |

You can receive the mandate details as part of your standard webhooks. To do this:

1. In your [Customer Area](https://ca-test.adyen.com/), go to **Developers** > **Webhooks**.
2. Next to **Standard webhook**, select the edit webhook icon **.
3. Under **Additional Settings**, select **Include Mandate Details**.
4. Select **Save Configuration**.

**Example webhook**

```json
{
   "live" : "false",
   "notificationItems" : [
      {
         "NotificationRequestItem" : {
            "additionalData" : {
               "refusalReasonRaw" : "MD000: Request successful",
               "tokenization.storedPaymentMethodId" : "9915989424854370",
               "tokenization.shopperReference" : "YOUR_SHOPPER_REFERENCE",
               "tokenization.store.operationType" : "created",
               "mandate.amount" : "1000.00",
               "mandate.amountRule" : "max",
               "mandate.currency" : "INR",
               "mandate.frequency" : "monthly",
               "mandate.startsAt" : "2021-02-16 00:00:00",
               "mandate.endsAt" : "2022-02-16 00:00:00",
               "mandate.remarks" : "Remark on mandate",
               "mandate.mandateId" : "",
               "mandate.providerId" : "PROVIDER_ID",
               "mandate.status" : "active",
               "mandate.txVariant" : "TX_VARIANT",
            },
            "amount" : {
               "currency" : "INR",
               "value" : 9000
            },
            "eventCode" : "AUTHORISATION",
            "eventDate" : "2021-02-16T10:57:26+02:00",
            "merchantAccountCode" : "YOUR_MERCHANT_ACCOUNT",
            "merchantReference" : "YOUR_ORDER_NUMBER",
            "paymentMethod" : "scheme",
            "pspReference" : "8826006786035918",
            "reason" : "null",
            "success" : "true"
         }
      }
   ]
}
```

## Make recurring payments

For every subsequent payment in a billing plan, for example a subscription, you need to:

1. [Initiate a pre-debit notification.](#send-a-pre-debit-notification)
2. [Make the recurring payment.](#make-a-subscription-payment)

### Initiate a pre-debit notification

A pre-debit notification is an email or SMS notification sent to a shopper to inform them of their impending billing plan charge. You need to inform the issuer when the notification needs to be sent out and subsequently the issuer sends the email or SMS. When they receive the notification, shoppers can choose to cancel the mandate. Shoppers receive the pre-debit notification at least 24 hours before every recurring payment in the billing plan.

To send a pre-debit notification to your shopper, make a POST call to `/notifyShopper`:

* `storedPaymentMethodId`: The token for your shopper's stored payment details.
* `merchantAccount`: Your merchant account associated with the shopper's stored payment details.
* `shopperReference`: The shopper reference associated with the billing plan.
* `amount`: The amount you are going to charge the shopper. If you have configured **max** for the `mandate.amountRule`, the shopper can be charged any amount between INR 1 to the amount in the `mandate.amount` field. If you have configured **exact**, the shopper can only be charged the amount in the `mandate.amount` field.
* `billingDate`: The date the shopper will be charged.
* `reference`: The notification reference. This field is shown to the shopper if the `displayedReference` field is left blank or is not sent.
* `displayedReference`: Optional. The reference shown to the shopper in the pre-debit notification they receive from their issuer. If this field is left blank or is not sent, the `reference` field will be shown instead.

**/notifyShopper request**

```json
curl https://pal-test.adyen.com/pal/servlet/Recurring/v49/notifyShopper \
-u "ws@Company.YourCompany":"YourWSPassword" \
-H 'content-type: application/json' \
-d '{
    "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
    "storedPaymentMethodId": "8415995487234100",
    "shopperReference": "YOUR_SHOPPER_REFERENCE",
    "amount": {
        "currency": "INR",
        "value": 1000
    },
    "billingDate": "2021-03-16",
    "reference": "Example reference",
    "displayedReference": "Example displayed reference"
}'
```

The `/notifyShopper` response contains:

* `message`: Information about the status of the pre-debit notification.
* `shopperNotificationReference`: Unique reference to the pre-debit notification. Store this value to make the subsequent payment.

**Example /notifyShopper Success response**

```json
{
    "message": "Request Processed Successfully",
    "resultCode": "Success",
    "shopperNotificationReference": "9915003646742627",
    "storedPaymentMethodId": "8415995487234100",
    "pspReference": "9915003646742627",
    "reference": "Example reference",
    "displayedReference": "Example displayed reference"
}
```

If the `/notifyShopper` request fails, you will receive a response with `resultCode` set to **Refused**.

**Example /notifyShopper Refused response**

```json
{
    "message": "Request failed",
    "resultCode": "Refused",
    "pspReference": "9915003645882507",
    "reference": "Example reference",
    "displayedReference": "Example displayed reference"
}
```

If there was an issue with the `/notifyShopper` request, you will receive a response containing an `errorCode` and a `message` explaining the error. For a list of possible values, refer to [Generic error codes](/development-resources/error-codes#generic-error-codes).

**Example /notifyShopper error response**

```json
{
    "status": 422,
    "errorCode": "000",
    "message": "Invalid response",
    "errorType": "validation"
}
```

### Make a recurring payment

After the shopper has received the pre-debit notification, you can carry out a recurring payment, for example for a subscription.

1. To do so, make a POST [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) call, including:

   | Field                                        | Required                                                                                    | Description                                                                        |
   | -------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
   | `amount`                                     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Include the `currency` and `value` of the shopper's subscription payment.          |
   | `paymentMethod.type`                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **scheme**                                                                         |
   | `paymentMethod.storedPaymentMethodId`        | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The token value for the shopper's stored payment information.                      |
   | `paymentMethod.shopperNotificationReference` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Unique reference to the pre-debit notification from the `/notifyShopper` response. |
   | `shopperEmail`                               |                                                                                             | The shopper's email address.                                                       |
   | `shopperIP`                                  |                                                                                             | The shopper's IP address.                                                          |
   | `merchantAccount`                            | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your merchant account                                                              |
   | `shopperReference`                           | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper reference associated with the subscription.                            |
   | `shopperInteraction`                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **ContAuth**.                                                               |
   | `recurringProcessingModel`                   | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Set to **Subscription** or **UnscheduledCardOnFile**.                              |

   **/payments request**

   ```json
   curl https://checkout-test.adyen.com/v72/payments \
   -H 'x-api-key: ADYEN_API_KEY' \
   -H 'content-type: application/json' \
   -d '{
       "amount": {
           "currency": "INR",
           "value": 1000
       },
       "paymentMethod": {
           "type": "scheme",
           "storedPaymentMethodId": "8415995487234100",
           "shopperNotificationReference": "9915003646742627"
       },
       "shopperIP": "127.0.0.1",
       "shopperEmail": "s.hopper@example.com",
       "returnUrl": "https://your-company.example.com/checkout?shopperOrder=12xy..",
       "reference": "YOUR_ORDER_NUMBER",
       "shopperInteraction": "ContAuth",
       "recurringProcessingModel": "Subscription",
       "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
       "shopperReference": "YOUR_SHOPPER_REFERENCE"
   }'
   ```

2. The [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response contains:

   * [resultCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#responses-200-resultCode): **Authorised**

   **/payments response**

   ```json
   {
     "additionalData": {
         "cvcResult": "0 Unknown",
         "authCode": null,
         "avsResult": "0 Unknown",
         "tokenization.storedPaymentMethodId": "9915989424854370",
         "tokenization.shopperReference": "YOUR_SHOPPER_REFERENCE",
         "tokenization.store.operationType" : "created",
         "refusalReasonRaw": "0300: Success",
         "mandate.amount" : "1000.00",
         "mandate.amountRule" : "max",
         "mandate.currency" : "INR",
         "mandate.frequency" : "monthly",
         "mandate.startsAt" : "2020-02-16 00:00:00",
         "mandate.endsAt" : "2022-02-16 00:00:00",
         "mandate.remarks" : "Remark on mandate",
         "mandate.mandateId" : "",
         "mandate.providerId" : "PROVIDER_ID",
         "mandate.status" : "active",
         "mandate.txVariant" : "TX_VARIANT",
         "acquirerCode": "ACQUIRER_CODE",
         "acquirerReference": "ACQUIRER_REFERENCE",
         ...
     },
     "pspReference": "8614811075307466",
     "resultCode": "Authorised",
     "amount": {
         "currency": "INR",
         "value": 1000
     },
     "merchantReference": "YOUR_ORDER_NUMBER"
        }
   ```

   If the payment is not successful, the `resultCode` will be **Refused**.

3. Check the [webhook](/development-resources/webhooks) message with the final status of the payment.

   | eventCode         | success field | Description                                     | Action to take                                                                      |
   | ----------------- | ------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------- |
   | **AUTHORISATION** | **false**     | The transaction failed.                         | Cancel the order and inform the shopper that the payment failed.                    |
   | **AUTHORISATION** | **true**      | The shopper successfully completed the payment. | Inform the shopper that the payment has been successful and proceed with the order. |

## Cancel a mandate

When a shopper ends their mandate with their issuer, you are notified in a webhook message:

* **For acquiring with BillDesk** you receive a webhook message with an event code of **DISABLE\_RECURRING**.
* **For local acquiring** you need to enable [**Tokenization webhooks** ](/online-payments/tokenization/managing-tokens#webhooks)to receive a webhook with a type of **recurring.token.disabled.**
* If the shopper cancelled a mandate immediately after the related payment was authorized and just before the payment was cleared with the card scheme, you receive a webhook message with an event code of **CAPTURE\_FAILED** and the following message: *Capture rejected by card scheme because the shopper cancelled the recurring payment through their bank.*

To cancel the mandate, send a [/disable](https://docs.adyen.com/api-explorer/Recurring/latest/post/disable) request that includes:

| Field                      | Required                                                                                    | Description                                                                                                                                                                                                             |
| -------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `merchantAccount`          | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The merchant account identifier.                                                                                                                                                                                        |
| `shopperReference`         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The ID that uniquely identifies the shopper. The value provided here must be the same as the value used in the initial payment.                                                                                         |
| `recurringDetailReference` |                                                                                             | The ID that uniquely identifies the recurring detail reference. If not provided, the whole recurring contract for the provided `shopperReference` will be disabled, which includes all recurring details.               |
| `contract`                 |                                                                                             | Specify the contract if you only want to disable a specific use. This parameter can be set to one of the following values, or to a combination of values (comma-separated): - **ONECLICK** - **RECURRING** - **PAYOUT** |

**Example /disable request**

```json
{
    "merchantAccount": "ADYEN_MERCHANT_ACCOUNT",
    "shopperReference": "YOUR_SHOPPER_REFERENCE",
    "recurringDetailReference": "BPRMC9F77R9B99X3",
    "recurring":{
        "contract":"RECURRING,ONECLICK"
    }
}
```

The [/disable](https://docs.adyen.com/api-explorer/Recurring/latest/post/disable) response includes a `response` parameter that indicates either **\[detail-successfully-disabled]** or **\[all-details-successfully-disabled]**, depending on whether a specific recurring detail was in the request, or not.

**Example /disable response**

```json
{
    "response": "[detail-successfully-disabled]"
}
```

## Test and go live

Before going live, make sure to go to your [live India Customer Area](https://ca-live-in.adyen.com/) and follow the exact instructions as described above.

## See also

* [Tokenization](/online-payments/tokenization)
* [3D Secure - Redirect](/online-payments/3d-secure/redirect-3ds2)
* [Webhooks](/development-resources/webhooks)
* [API Explorer](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/overview)
