Subscriptions

Geidea offers a Subscription API that helps you manage recurring payments as part of your business applications or platforms. This API enables you to offer customers recurring payment features, a model often utilized by businesses that require collecting payments at regular intervals like streaming platforms, Software as a Service (SaaS) products, automated billing processes ,and more.

You can choose from the below two modes of subscription based on your business needs:

  1. Recurring Payments: It is a payment model where the customers authorize you to charge their card automatically at regular intervals for the goods/services provided to them.

❗️

For Recurring payments, make sure your customer agrees to automatic deductions at set intervals until cancellation or subscription expiry.

  1. Recurring Payment Links/Scheduled Invoices: You can use this payment model when you want to only schedule sending Payment Links to your customers in exchange of your services.

Advantages:

  1. Recurring Payments and Recurring Pay links are convenient for both customers and businesses.
  2. Automated recurring payments cut down the effort associated with manual invoicing and payment processing.

If you are already using our Create Session API Create Session API, you can easily set up subscriptions by passing the subscription ID generated from the Subscription API to the session creation. This process will let customers choose a subscription plan on your website and then show the payment page. It allows you to collect payments directly from your website without needing to share a Payment Link with the customer.

When setting up a subscription for a customer, you must pass customer details in case the subscription is for a new customer, or if the customer already exists, just pass the customer ID.

Subscription API Request

To initiate a Subscription API call, you will need to provide the following fields.

ParameterDatatypeDescriptionMandatory
recurringPaymentAmountFloatSubscription amount ex: 100.00Yes
currencyStringCurrency of subscription ex: AEDYes
cycleIntervalStringFrequency for which a subscription transaction must be executed
Valid values: day, week, month, year
Yes
cycleFrequencyIntegerNumber of times the subscription must be executed 1, 2, etc...Yes
typeOfPaymentStringIndicates type of Recurring Payment.
Valid values: "RecurringPayment", "RecurringLink"

RecurringPayment: means subsequent payment will be auto-collected from the customer based on his first payment

RecurringLink: means a payment link will be sent to the customer based on the cycle interval and frequency. The customer needs to be present every time to pay

If you are using Geidea Session or direct API's then you can pass typeOfPayment" = 'RecurringPayment"& "isFirstPmtPBL":false and collect the first payment from the customer via HPP.

The subsequent payments will be auto-collected from the customer based on the scheduled job
Yes
customerRequestObjectDetails of the customer required to create a customer. Once a customer is created you can send the customer Id in all future subscription requests. One of customerRequest Object or customerId is mandatory.Conditional
customerRequest.nameStringCustomer NameConditional
customerRequest.emailStringEmail of customer. One of email or phoneNumber must be present.Conditional
customerRequest.phoneCountryCodeStringCountry code of customer's phone number eg: "+971". If phoneNumber is passed, phoneCountryCode must be passed.Conditional
customerRequest.phoneStringCustomer's phone number eg: "511111111". If phoneCountryCode is passed, phoneNumber must be passed. One of email or phoneNumber must be present.Conditional
customerRequest.numberStringConditional
customerIdStringIf you have already created a customer using the customerRequest object, you can pass it here. One of customerRequest Object or customerId is mandatory.Conditional
descriptionstringThe description of the subscription ex: TV channel plan ANo
startDatedatetimeStart date of subscription. Ex: "2024-03-05T09:26:07.472Z"No
endDatedatetimeThe end date of the subscription. For creating an endless subscription do not pass the endDate. For creating a subscription for a specific period, pass the endDate or numberOfPaymentsConditional
numberOfPaymentsstringThe number of payments for the subscription. For creating an endless subscription do not pass the endDate. For creating a subscription for a specific period, pass the endDate or numberOfPaymentsConditional
languagestringThe language to be used on the checkout page.

Default value: "en"
No
isFirstPmtPBLbooleanUse this parameter as with value true or false depending upon how you would like to collect the first payment. If you pass this as true the customer will receive the first payment request as a payment link. If you are using Geidea Session or direct API's please pass the value as false. Default value will be trueNo
paylinkExpirationPeriodstringThe payment link expiration date, is required only when the isFirstPmtPBL parameter is set to true. The default expiration period for the payment link is 7 days. If you want to use any cycle frequency less than 7 days, please make sure you are passing the expiration period accordingly.No
timestampstringThe timestamp of the moment at which the create subscription request has been initiated.No
signaturestringA parameter to ensure the security and authenticity of API communications. It involves generating a signature using the contents of the API request and secret keys, which is then sent along with the request.Yes
AmountVariabilitystringIndicates whether the subscription amount is fixed or changing during the subscription. If value is "FIXED" then the amount/cycle related parameters cannot be changed during the subscription. If the value is "VARIABLE" then amount/cycle related parameters can be changed for the subscription.No

📘

Usage of the API environment endpoints

Please make sure you use the correct endpoint based on your environment

🚧

The Amount Variability parameter must remain constant throughout a subscription.

If a subscription is set with a FIXED amount variability, it should remain unchanged until cancellation or completion. Any alteration to the amount variability should be considered a new agreement, requiring the creation of a new subscription.

Signature creation for Create Subscription request

We have a signature parameter in the Create Subscription API to have an additional layer of security during payment processing. To generate the signature, follow the steps below:

  1. Concatenate the string of {MerchantPublicKey, amount, currency, TimeStamp}
  2. Hash (SHA-256) this Concatenated string by (Merchant_API_Password)
  3. Convert Hashed Value to Base64Str

Sample Request for Subscription Creation with CustomerRequest :

curl --location 'https://api.merchant.geidea.net/subscriptions/api/v1/direct/subscription' \
--header 'accept: text/plain' \
--header 'Authorization: Basic ZGI1ZDk1N2QtYTBmZC00YTFlLTkzMTItNWViN2FlNmIzZGI0OjA0NWRjYTJhLWM4MzMtNDVmMC04ZjIyLTQ0NGU1MGIwOGYwYw==' \
--header 'Content-Type: application/json' \
--data-raw '{
    "recurringPaymentAmount": "100",
    "currency": "AED",
    "cycleInterval": "month",
    "cycleFrequency": 3,
    "typeOfPayment": "RecurringPayment",
    "customerRequest": {
        "name": "hsbc",
        "email": "[email protected]",
        "phoneCountryCode": "+971",
        "phone": "529872786",
        "number": "467715071205"
    },
    "description": "Subscription #453293393959",
    "startDate": "2024-03-17T09:26:07.472Z",
    "endDate": null,
    "numberOfPayments": 3,
    "language": "EN",
    "paylinkExpirationPeriod": "1",
    "isFirstPmtPBL":false,
    "AmountVariability" : "VARIABLE",
    "timestamp": null,
    "signature": "tF04+uS/SE+z4Bx6JxtO7UAd/srkX9KK7pM3Ertp2iM="
}'

Sample Request for Subscription Creation using CustomerId :

curl --location 'https://api.merchant.geidea.net/subscriptions/api/v1/direct/subscription' \
--header 'accept: text/plain' \
--header 'Authorization: Basic ZGI1ZDk1N2QtYTBmZC00YTFlLTkzMTItNWViN2FlNmIzZGI0OjA0NWRjYTJhLWM4MzMtNDVmMC04ZjIyLTQ0NGU1MGIwOGYwYw==' \
--header 'Content-Type: application/json' \
--data '{
    "recurringPaymentAmount": "100",
    "currency": "AED",
    "cycleInterval": "month",
    "cycleFrequency": 3,
    "typeOfPayment": "RecurringPayment",
    "customerId": "aa6d9ce5-7441-4fff-7328-08dc3cbb2fe8",
    "description": "Subscription #453293393959",
    "startDate": "2024-03-17T09:26:07.472Z",
    "endDate": null,
    "numberOfPayments": 3,
    "language": "EN",
    "paylinkExpirationPeriod": "1",
    "isFirstPmtPBL":false,
    "AmountVariability" : "VARIABLE",
    "timestamp": null,
    "signature": "tF04+uS/SE+z4Bx6JxtO7UAd/srkX9KK7pM3Ertp2iM="
}'

You can find a full list of parameters which can be used with the Subscription API here.

API Response

The key parameters sent in the API response are as follows:

ParameterDescription
subscriptionIdReference for subscription transaction. This parameter must be used when creating a session before initiating a subscription payment transaction.
occurencesThis object will display all the occurrences along with its unique id and status. The number of occurrences in this object will be dependent on the number of payments you are collecting from your customer.
occurrences.occurrenceIdUnique occurrence id associated with a payment.
occurrences.typeThe type of the payment which will always be "Recurring" in case of Subscriptions
occurrences.retriesIncase of failed auto debit against your customer's card. We will retry the payment twice after the failure. The retry id and details associated with it will be updated here.
occurrences.statusThe status of the occurrence whether the payment has been processed or "not processed"
occurrences.paylinkIdIf the subscription was created with Recurring Payment link as type of payment then each occurrence will be linked to a Paylink id
occurrences.orderIdOrderID associated with the payment for the subscription
occurrences.isInFinalStatusFinal status of the occurrence. For Eg : if the payment in not processed and is awaiting payment tis field would have final status as False. Once paid successfully the final status of the occurrence will be True
nextOccurrenceDateNext payment due date of the subscription
statusStatus of subscription creation
paylinkExpirationPeriodExpiry date for payment link if the mode of subscription is chosen as payment link
numberOfPaymentsTotal number of payments for a subscription
customerIdCustomer ID for whom the subscription is created
If the customer does not exist, the customer is created and the customer ID is returned in the response.
agreementIdIncase of payment type "recurring payment" the first payment method is saved against a tokenid and an agreement id is autogenerated which can be mapped against the agreement with your customer in your system.
signatureA parameter to ensure the security and authenticity of API communications. It involves generating a signature using the contents of the API response and secret keys, which is then sent along with the response
amountVariabilityIndicates whether the subscription amount is fixed or changing during the subscription. If value is "FIXED" then the amount does not change during the subscription. If the value is "VARIABLE" then amount can be changed for the subscription. Note: If "FIXED" is used then "currency", "recurringPaymentAmount" and "cycleFrequency" can't be updated
applePayRecurringTokenA token used to debit customers through the use of an Apple Pay encrypted payment

Signature creation for Cancel Subscription response

We have signature parameter in the Subscription API response to provide an additional layer of security when sending to the merchant the response of the "Create Subscription" API. To generate the signature to confirm if it matches the signature passed in the response, follow the steps below:

  1. Concatenate the parameters (MerchantPublicKey, recurringPaymentAmount, subscriptionId, status)
  2. Hash the concatenated string with the MerchantPrivateKey (API password) as a key (algorithm for hashing: SHA256)
  3. Convert Hashed Value to Base64Str

Sample Response

{
    "subscription": {
        "customerName": "hsbc",
        "customerEmail": "[email protected]",
        "customerPhoneCountryCode": "+971",
        "customerPhone": "529872786",
        "customerAddresses": [],
        "subscriptionId": "8a055aa4-13d9-4f74-421d-08dc3cbb381c",
        "merchantId": "0ee5274f-5b1a-4415-62a8-08dc20998061",
        "merchantPublicKey": "db5d957d-a0fd-4a1e-9312-5eb7ae6b3db4",
        "description": "Subscription #453293393959",
        "recurringPaymentAmount": 100,
        "currency": "AED",
        "initialPaymentAmount": null,
        "initialPaymentExpirationPeriod": null,
        "startDate": "2024-03-08T00:00:00Z",
        "endDate": "2124-03-08T00:00:00Z",
        "cycleInterval": "Month",
        "cycleFrequency": 3,
        "timestamp": null,
    	  "signature": "tF04+uS/SE+z4Bx6JxtO7UAd/srkX9KK7pM3Ertp2iM=",
        "occurrences": [
            {
                "occurrenceId": "9c6e2c11-82c1-4fc2-7e67-08dc3cbb3826",
                "subscriptionId": "8a055aa4-13d9-4f74-421d-08dc3cbb381c",
                "type": "Recurring",
                "amount": 100,
                "date": "2024-03-08T00:00:00Z",
                "status": "NotProcessed",
                "retries": [],
                "paylinkId": null,
                "orderId": null,
                "isInFinalStatus": false
            }
        ],
        "nextOccurrenceDate": "2024-03-08T00:00:00Z",
        "status": "Created",
        "typeOfPayment": "RecurringPayment",
        "paylinkExpirationPeriod": 7,
        "numberOfPayments": null,
        "customerId": "d0edbc67-38b9-4ef4-7329-08dc3cbb2fe8",
        "number": "453293393959",
        "language": "AR",
        "agreementId": null,
        "merchantName": "",
        "amountVariability": "FIXED",
        "applePayRecurringToken": null,
        "isFirstPmtPBL": true,
        "createdDate": "2024-03-08T05:08:46.896845Z",
        "createdBy": "DirectApi",
        "updatedDate": "2024-03-08T05:08:46.896845Z",
        "updatedBy": null
    },
    "responseCode": "000",
    "detailedResponseCode": "000"
}

After you successfully execute the Subscription API request, you must initiate the Create Session API call. This call must contain the subscriptionId parameter that is generated from the Create Subscription API call.

After you receive the session ID in the response, you should use it to load the HPP (Hosted Payment Page).

The HPP will display a message the following message for the customer.

📘

By clicking 'Pay', you are agreeing that your upcoming payments will be charged automatically from your card.

Once the customer enters the card details and completes the transaction, you'll receive a callback response with the subscription details. Below is the sample callback for reference.

Sample Callback

{
  "order": {
    "orderId": "177d7d8b-4668-4089-dc9b-08dc3bde4c14",
    "amount": 100,
    "tipAmount": 0,
    "convenienceFeeAmount": 0,
    "totalAmount": 100,
    "settleAmount": 99.05,
    "currency": "AED",
    "settleCurrency": "SAR",
    "language": "en",
    "detailedStatus": "Paid",
    "status": "Success",
    "threeDSecureId": "67ddfa06-a883-4d83-f4a9-08dc3bde571d",
    "merchantId": "d975d546-b7c4-4ac0-1b0c-08db1e9e56b4",
    "merchantPublicKey": "d9fd2b48-16f6-4213-9d39-293139dc2795",
    "parentOrderId": null,
    "merchantReferenceId": null,
    "mcc": "1731",
    "callbackUrl": "https://webhook.site/77075b05-601f-46e4-9747-ee42c03f9c32",
    "billingAddress": {
      "countryCode": null,
      "street": null,
      "city": null,
      "postCode": null
    },
    "shippingAddress": {
      "countryCode": null,
      "street": null,
      "city": null,
      "postCode": null
    },
    "returnUrl": null,
    "cardOnFile": true,
    "tokenId": "d82eb2d4-8c16-452a-093f-08dc3d100b9e",
    "initiatedBy": "Internet",
    "agreementId": "0f22da86-6667-4c23-aadb-4d496217b47b",
    "agreementType": "Recurring",
    "amountVariability": "FIXED",
    "paymentOperation": "Pay",
    "custom": null,
    "paymentIntent": null,
    "restrictPaymentMethods": true,
    "paymentMethods": null,
    "platform": null,
    "statementDescriptor": null,
    "description": null,
    "setDefaultPaymentMethod": false,
    "recurrence": {
      "recurrenceId": "a6e48ff6-6df1-4868-d01b-08dc3c614224",
      "orderId": "177d7d8b-4668-4089-dc9b-08dc3bde4c14",
      "amount": 100,
      "currency": "AED",
      "cycleInterval": "Day",
      "cycleFrequency": 3,
      "numberOfPayments": 10,
      "startDate": "2024-03-06T00:00:00",
      "endDate": "2024-04-05T00:00:00",
      "minimumDaysBetweenPayments": 1,
      "description": "HSBC-Recurring",
      "createdDate": "0001-01-01T00:00:00",
      "createdBy": "",
      "updatedDate": null,
      "updatedBy": null
    },
    "transactions": [
      {
        "transactionId": "67ddfa06-a883-4d83-f4a9-08dc3bde571d",
        "type": "Authentication",
        "status": "Success",
        "amount": 100,
        "currency": "AED",
        "source": "HPP",
        "authorizationCode": null,
        "rrn": null,
        "stan": "0",
        "paymentMethod": {
          "type": "Card",
          "brand": "mastercard",
          "cardholderName": "sidra",
          "maskedCardNumber": "512345******0008",
          "wallet": null,
          "expiryDate": {
            "month": 10,
            "year": 39
          },
          "sameBank": false,
          "issuingCountry": null,
          "fundingType": null,
          "issuingBank": null,
          "cardCategory": null
        },
        "codes": {
          "acquirerCode": null,
          "acquirerMessage": null,
          "responseCode": "000",
          "responseMessage": "Success",
          "detailedResponseCode": "000",
          "detailedResponseMessage": "The operation was successful"
        },
        "authenticationDetails": {
          "acsEci": "02",
          "authenticationToken": "kHyn+7YFi1EUAREAAAAvNUe6Hv8=",
          "paResStatus": null,
          "veResEnrolled": null,
          "xid": "44cb9b15-ef86-446e-90b8-c9d1549e1de9",
          "accountAuthenticationValue": null,
          "proofXml": null,
          "threeDSecureServerTransactionId": null,
          "acsTransactionId": "3ddaa001-48ae-44fd-9f1d-4eaf3ff6e0a8",
          "directoryServerId": "A999999999",
          "dsTransactionId": "44cb9b15-ef86-446e-90b8-c9d1549e1de9",
          "methodCompleted": true,
          "methodSupported": "SUPPORTED",
          "protocolVersion": "2.1.0",
          "requestorId": "MAS00001_INT_MPGS_MTTESTENDAVA",
          "requestorName": "Endava",
          "transactionStatus": "Y",
          "statusReasonCode": null,
          "acsReferenceNumber": null,
          "dsReferenceNumber": null
        },
        "postilionDetails": null,
        "terminalDetails": null,
        "meezaDetails": null,
        "bnplDetails": null,
        "bankInstallmentDetails": null,
        "correlationId": "3c278279-79af-4a36-8567-06fc9e8560c8",
        "parentTransactionId": null,
        "paymentAttemptId": "ce7ea410-f179-4af3-aded-e3b30388ff5e",
        "acquirer": {
          "additionalResponseData": null,
          "batch": null,
          "customData": null,
          "date": null,
          "id": null,
          "merchantId": "3000000023",
          "settlementDate": null,
          "time": null,
          "timeZone": null,
          "transactionId": null
        },
        "authorizationResponse": {
          "autoExpiry": null,
          "avsCode": null,
          "cardLevelIndicator": null,
          "cardSecurityCodeError": null,
          "cardSecurityCodePresenceIndicator": null,
          "commercialCard": null,
          "commercialCardIndicator": null,
          "financialNetworkCode": null,
          "financialNetworkDate": null,
          "marketSpecificData": null,
          "merchantAdviceCode": null,
          "paySvcData": null,
          "posData": null,
          "posEntryMode": null,
          "posEntryModeChanged": null,
          "processingCode": null,
          "responseCode": null,
          "date": null,
          "responseMessage": null,
          "returnAci": null,
          "time": null,
          "timeZone": null,
          "trackQuality": null,
          "transactionIdentifier": null,
          "transactionIntegrityClass": null,
          "validationCode": null,
          "vpasResponse": null
        },
        "madaDetails": null,
        "refundType": null,
        "refundStatus": null,
        "isExtensionComplete": null,
        "extensionDate": "2024-03-06T08:21:20.9149799",
        "deviceId": "2edfe36d-50da-4b38-fe7d-08dc30686a04",
        "createdDate": "2024-03-06T08:20:58.6004229",
        "createdBy": "PGW",
        "updatedDate": "2024-03-06T08:21:20.9154119",
        "updatedBy": "PGW"
      },
      {
        "transactionId": "affed950-ac25-4357-f4aa-08dc3bde571d",
        "type": "Pay",
        "status": "Success",
        "amount": 100,
        "currency": "AED",
        "source": "HPP",
        "authorizationCode": "217841",
        "rrn": "406608217841",
        "stan": "217841",
        "paymentMethod": {
          "type": "Card",
          "brand": "mastercard",
          "cardholderName": "sidra",
          "maskedCardNumber": "512345******0008",
          "wallet": null,
          "expiryDate": {
            "month": 10,
            "year": 39
          },
          "sameBank": false,
          "issuingCountry": null,
          "fundingType": null,
          "issuingBank": null,
          "cardCategory": null
        },
        "codes": {
          "acquirerCode": "00",
          "acquirerMessage": "Approved",
          "responseCode": "000",
          "responseMessage": "Success",
          "detailedResponseCode": "000",
          "detailedResponseMessage": "The operation was successful"
        },
        "authenticationDetails": null,
        "postilionDetails": null,
        "terminalDetails": null,
        "meezaDetails": null,
        "bnplDetails": null,
        "bankInstallmentDetails": null,
        "correlationId": "848b28be-e2e6-4fa4-9a35-0d3e89b4ee87",
        "parentTransactionId": null,
        "paymentAttemptId": "ce7ea410-f179-4af3-aded-e3b30388ff5e",
        "acquirer": {
          "additionalResponseData": null,
          "batch": 20240306,
          "customData": null,
          "date": "0306",
          "id": "RIYADBANK_S2I",
          "merchantId": "3000000023",
          "settlementDate": "2024-03-06T00:00:00",
          "time": null,
          "timeZone": "+0300",
          "transactionId": "123456789"
        },
        "authorizationResponse": {
          "autoExpiry": null,
          "avsCode": null,
          "cardLevelIndicator": null,
          "cardSecurityCodeError": "M",
          "cardSecurityCodePresenceIndicator": null,
          "commercialCard": "888",
          "commercialCardIndicator": "3",
          "financialNetworkCode": "777",
          "financialNetworkDate": null,
          "marketSpecificData": null,
          "merchantAdviceCode": null,
          "paySvcData": null,
          "posData": "1024100006600",
          "posEntryMode": "812",
          "posEntryModeChanged": null,
          "processingCode": "003000",
          "responseCode": "00",
          "date": null,
          "responseMessage": null,
          "returnAci": null,
          "time": null,
          "timeZone": null,
          "trackQuality": null,
          "transactionIdentifier": "123456789",
          "transactionIntegrityClass": null,
          "validationCode": null,
          "vpasResponse": null
        },
        "madaDetails": null,
        "refundType": null,
        "refundStatus": null,
        "isExtensionComplete": null,
        "extensionDate": "2024-03-06T08:21:27.5033056Z",
        "deviceId": "2edfe36d-50da-4b38-fe7d-08dc30686a04",
        "createdDate": "2024-03-06T08:21:22.8001357",
        "createdBy": "PGW",
        "updatedDate": "2024-03-06T08:21:27.5038456Z",
        "updatedBy": "PGW"
      }
    ],
    "orderItems": [],
    "isTokenPayment": false,
    "paymentMethod": {
      "type": "Card",
      "brand": "mastercard",
      "cardholderName": "sidra",
      "maskedCardNumber": "512345******0008",
      "wallet": null,
      "expiryDate": {
        "month": 10,
        "year": 39
      },
      "sameBank": false,
      "issuingCountry": null,
      "fundingType": null,
      "issuingBank": null,
      "cardCategory": null
    },
    "totalAuthorizedAmount": 100,
    "totalCapturedAmount": 100,
    "totalRefundedAmount": 0,
    "orderSource": "GeideaGateway",
    "paymentBrands": [
      "mastercard"
    ],
    "multiCurrency": {
      "authCurrency": "AED",
      "authAmount": 100,
      "settleCurrency": "SAR",
      "settleAmount": 99.05,
      "exchangeRate": 1.0211,
      "exchangeFeePercentage": 3,
      "exchangeFeeAmount": 3.06
    },
    "isTest": true,
    "cashOnDelivery": false,
    "amountToCollect": null,
    "isDownPayment": false,
    "exchangeRate": 1.0211,
    "exchangeFeePercentage": 3,
    "exchangeFeeAmount": 3.06,
    "deviceId": "2edfe36d-50da-4b38-fe7d-08dc30686a04",
    "gatewayDecision": "ContinueToPay",
    "subscriptionId": "5390116f-fc3b-4d60-db4e-08dc3c4cda87",
    "subscriptionOccurrenceId": "63d60ed9-95be-42ba-ae2a-08dc3c4cda89",
    "refundType": null,
    "refundStatus": null,
    "bankId": null,
    "isPayWithToken": false,
    "customerName": null,
    "customerEmail": null,
    "createCustomer": false,
    "customerReferenceId": null,
    "customerId": null,
    "customerPhoneNumber": null,
    "customerPhoneCountryCode": null,
    "customerCustomValue": null,
    "airLine": null,
    "createdDate": "2024-03-06T08:20:58.6004229",
    "createdBy": "PGW",
    "updatedDate": "2024-03-06T08:21:08.0478995",
    "updatedBy": "PGW"
  },
  "signature": "4y8wYhOV+3SWxi9LGMR2hnPgK+EDTqXYqvXwYLO7yWM=",
  "timeStamp": "03/06/2024 08:21:27"
}

Once the transaction is successfully approved the customer receives an email with the subscription details.

Sample email sent to the customer