• Getting Started
    • Mobile Integration (Android/IOS)
      Enterprise Solutions
      Retail Solutions
      Accept Payments
      Process Payments
      API References
      Other Processes
      Mini Program Platform

      Paytm Subscriptions

      Paytm Subscriptions enables you to collect recurring payments from your customers automatically based on a preselected schedule.

      Subscription payments are meant for services/products that are consumed on an ongoing basis and payments are made on fixed intervals. Via Paytm, you can charge your customers automatically without any explicit payment action at customers end.

      Note: Paytm Subscription is available only to enterprise customers. Get in touch to request access to Paytm Subscription.

      Paymodes supported for subscription payments

      Paytm currently supports the following payment methods to collect recurring payments -

      E-Mandate https://www.npci.org.in/nach-e-mandates-new 1-2 days1-2 daysCustom Checkout Only
      Paper MandateAll Banks2-12 days1-2 daysCustom Checkout Only
      Credit CardAll Banks- Visa, Master Card, AMEX (coming soon)Instant(Re 1 debit)InstantPaytm Standard Checkout & Custom Checkout
      Debit CardICICI, Kotak, Citibank, Canara Bank, Standard CharteredInstant (Re 1 debit)InstantPaytm Standard Checkout & Custom Checkout
      WalletAll Paytm walletsInstant(Re 1 debit)InstantPaytm Standard Checkout & Custom Checkout

      Getting started with Paytm Subscriptions

      Subscription Payments involves two broad steps -

      Step 1: Creation of subscription

      A subscription starts with taking consent from customer to deduct periodic payment from her chosen payment method for a product/service.

      The customer journey is as follows -

      • You offer to provide a product/service on an ongoing basis under one or more subscription plans. This plan presents a payment schedule to the customer
      • Once the customer selects a plan, she makes a one-time payment to provide
        • Consent on regular and timely payments as per the service schedule
        • Link a payment instrument from which all future plan payments will be deducted automatically

      Step 2: Collect recurring payments for subscription

      In this step, the customer’s registered payment instrument is charged without her intervention. You initiate a renewal transaction which is validated by Paytm against the subscription plan established in STEP 1. In case the validation is successful, a charge is made to customer’s registered payment instrument

      Subscription Solutions offered by Paytm

      We offer two solutions to support subscription payments. Select a solution based on the payment experience you want to build for your customers -

      Custom Checkout

      Paytm provides secure APIs to create your own payment checkout page on your mobile app or website. Custom Checkout offers the flexibility to create a payment experience that closely follows your own brand and thematic guidelines.

      Paytm Standard Checkout

      In this standard hosted solution, customers are redirected to Paytm where they complete the payment. Checkout is the faster way to go live with Subscriptions if a customized payment experience is not critical for you.

      The following table lists the basic difference between the two solutions * -

      Paytm Standard CheckoutCustom Checkout
      Payment experience customization availableNo. Standard Paytm experience is invoked for all customersYes
      Payment page behaviorRedirection to Paytm Standard Checkout and then to banksHosted natively within your app or website. One-click redirection to banks for payment
      Effort required for integrationLowerHigher
      Feature update delivery
      (to accommodate new payment methods in the future and other product updates)
      Always updated real-timeNeeds to be updated by you manually

      * Note that these two solutions differ only in the subscription creation step.

      Paytm Standard Checkout provides a secure, PCI-compliant way to accept recurring payments via Debit/Credit card and Paytm Balance from your customers in your mobile app or website.

      Demo for Paytm Standard Checkout

      payment checkout demo img

      Overview of recurring payment processing via Paytm Standard Checkout Subscription

      Creation of subscription

      1. Customer selects the subscription plan along with payment schedule on your page. The payment process starts at the click of pay button on your platform
      2. Create an order in your subscription/order system and generate checksumhash required for making a payment request. Checksumhash is used for detecting errors or tampering introduced during the transmission of payment request. Checksum is generated using merchant key
      3. Send the payload and checksumhash in an HTML form POST to Paytm. This redirects the customer to Paytm's payment page
      4. Customer fills payment method details and completes the two-factor authentication. Once the payment is complete, a response is posted in an HTML form POST on your app/website's callback URL
      5. Verify checksumhash received in response to ensure that it has not been tampered with
      6. Paytm provides a Subscription ID on successful creation of a subscription. This ID should be stored in your system as a unique identifier for the created subscription. This ID is required in renewal and cancellation process
      7. Lastly, verify subscription status with Fetch Subscription Status API via a server to server call.

      Renewal of subscription

      On the date of renewal, send the renewal request in the Renewal API. This renewal request is generated using the Paytm subscription ID which provided at the time of subscription creation. On failure of renewal transaction, a new renewal can be reattempted provided “Retry” is configured in the subscription plan. Lastly after one successful renewal transaction in a renewal cycle, a new renewal transaction cannot be attempted

      Cancellation of subscription

      Any time you or your customer wants to cancel an existing subscription, you can use the Cancel API. Once cancelled, the subscription is terminated and cannot be reused further.

      The chart below captures the detailed interaction of each component:

      subscription creation image

      Steps in processing subscription payments via Checkout

      Step 1 :

      At the click of payment button by customer on your website, create a subscription order in your system and generate the required payload for payment request. Parameters of payload are as follows -

      REQUEST_TYPE String (20) MandatoryType of transaction. SUBSCRIBE for subscription transaction
      MIDString (20) MandatoryThis is a unique identifier provided to every merchant by Paytm. MID is part of your account credentials and is different on staging and production environment. Your staging MID is available here and production MID will be available once your activation is complete
      ORDER_IDString (20) MandatoryUnique reference ID for a transaction which is generated by merchant Special characters allowed in Order ID are: @, -, _, .
      CUST_IDString (64) MandatoryUnique reference ID for every customer which is generated by merchant Special characters allowed in Cust_ID are @, ! ,_ ,$, .
      SUBS_SERVICE_IDString (20) OptionalSubscription service identifier provided by the merchant. This is unique id and used to identify the customer at the time of renewal call
      CHANNEL_IDString (3) MandatoryThis parameter is used to control the theme of the payment page. Based on the channel passed, Paytm will render the layout suitable for that specific platform
      For websites, the value is WEB
      For Mobile websites/App, the value is WAP
      WEBSITEString (30) MandatoryFor staging environment: For staging environment: WEBSTAGING
      For production environment: Will be available here once your activation is complete
      SSOTokenString (36) OptionalPaytm user SSO_TOKEN for the identification of user
      CALLBACK_URLString (255) OptionalOn completion of transaction, Paytm payment gateway will send the response on this URL.. Sample URL is - https://merchant.com/callback/
      TXN_AMOUNTString (10) MandatoryThis is the upfront amount ” that is to be charged from the customer at the time of creation of subscription. Should contain digits up to two decimal points. Only special character allowed is (“.”)
      SUBS_AMOUNT_TYPEString (10) MandatoryRenewal amount of subscription can be fixed or capped to max amount. Possible values of this attributes are
      1. FIX: Amount charged in all renewal transactions will be same as TXN_AMOUNT
      2. VARIABLE: Renewal amount can be variable and capped by SUBS_MAX_AMOUNT
      SUBS_MAX_AMOUNTString (10) ConditionalMaximum amount that can be deducted in a subscription request. Mandatory: if SUBS_AMOUNT_TYPE is VARIABLE
      SUBS_FREQUENCY_UNITString (10) Mandatory
      Defines renewal frequency. If the renewal cycle is of 2 months, its value would be monthly. The values supported for this attribute currently are: DAY, MONTH, YEAR
      SUBS_FREQUENCYString (5) MandatoryCombined with SUBS_FREQUENCY_UNIT, this variable defines the frequency. If the renewal cycle is of 2 months, the value of the attributes values can be:
      1. if unit is Day then 30
      2. if unit is Month then 1
      SUBS_START_DATEString (20) OptionalThis is the date from which the renewal starts i.e. first renewal transaction can be charged to the customer. Subsequent renewals can be charged by customer after a definite period defined with SUBS_FREQUENCY and SUBS_FREQUENCY_UNIT. Format of date is YYYY-MM-DD
      SUBS_GRACE_DAYSString (2) ConditionalNumber of days after renewal cycle start date for which merchant can send renewal request.
      Mandatory: If SUBS_START_DATE is sent in this request
      SUBS_EXPIRY_DATEString (10) MandatoryDate when subscription will expire. Format should be YYYY-MM-DD
      SUBS_ENABLE_RETRYString (2) MandatoryMerchant can retry a transaction in case of failure from bank/wallet
      Possible Value: 1 - For Enable Retry , 0 - Else
      SUBS_RETRY_COUNTString (2) NoCount of renewal retries allowed in case of failure renewal fails.
      In case grace days are not present : Retries are allowed on renewal date only
      In case grace days are present : Retries are allowed dates >= renewal date and <= Renewal Date + Grace days.
      SUBS_PPI_ONLYString (1) MandatoryRepresents if add money is allowed at the time of subscription or not.
      Possible Values are:
      Y : In case of insufficient balance in wallet, renewal transaction will fail
      N : In case of insufficient balance in wallet, add money from users saved card will be attempted
      SUBS_PAYMENT_MODEString (5) MandatoryAmount for subscription and subsequent renewals will be charged from customer’s credit/debit card.
      Possible Values: CC, DC, PPI
      MOBILE_NOString (15) OptionalCustomer's mobile number. Passing this enables faster login for customer into his/her Paytm account. When the customer clicks on login, the mobile number comes pre-filled on our payment page
      EMAILString (50) OptionalCustomer's email ID
      CHECKSUMHASHString (108) MandatorySignature to avoid tampering. Generated using server side checksum utility available here
      Go through Types of subscriptions supported & creation methodology to understand the varied subscription use cases supported by Paytm

      Step 2 :

      Generate checksumhash using the Paytm library with parameters in key-value pairs. Using the payload and checksumhash, make an HTML form POST and redirect customer to Paytm. Sample code snippets and Github links for the checksum utility and HTML form post are provided below.

      /* initialize a TreeMap object */
      TreeMap<String, String> paytmParams = new TreeMap<String, String>();
      /* Find your MID in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys */ paytmParams.put("MID", "YOUR_MID_HERE");
      /* this will be SUBSCRIBE */ paytmParams.put("REQUEST_TYPE", "SUBSCRIBE");
      /* Find your WEBSITE in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys */ paytmParams.put("WEBSITE", "YOUR_WEBSITE_HERE");
      /* Find your INDUSTRY_TYPE_ID in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys */ paytmParams.put("INDUSTRY_TYPE_ID", "YOUR_INDUSTRY_TYPE_ID_HERE");
      /* WEB for website and WAP for Mobile-websites or App */ paytmParams.put("CHANNEL_ID", "YOUR_CHANNEL_ID");
      /* Enter your unique order id */ paytmParams.put("ORDER_ID", "YOUR_ORDER_ID");
      /* unique id that belongs to your customer */ paytmParams.put("CUST_ID", "CUSTOMER_ID");
      /* customer's mobile number */ paytmParams.put("MOBILE_NO", "CUSTOMER_MOBILE_NUMBER");
      /* customer's email */ paytmParams.put("EMAIL", "CUSTOMER_EMAIL");
      /** * Amount in INR that is to be charged upfront at the time of creating subscription * this should be numeric with optionally having two decimal points */ paytmParams.put("TXN_AMOUNT", "ORDER_TRANSACTION_AMOUNT");
      /* this is unique subscription id that belongs to your customer's subscription service */ paytmParams.put("SUBS_SERVICE_ID", "SUBSCRIPTION_SERVICE_ID");
      /* enter subscription amount type here, possible value is either FIX or VARIABLE */ paytmParams.put("SUBS_AMOUNT_TYPE", "SUBSCRIPTION_AMOUNT_TYPE");
      /* enter maximum renewal amount that can be charged for this subscription */ paytmParams.put("SUBS_MAX_AMOUNT", "SUBSCRIPTION_MAX_AMOUNT");
      /* enter subscription frequency here */ paytmParams.put("SUBS_FREQUENCY", "SUBSCRIPTION_FREQUENCY");
      /* enter subscription frequency unit here */ paytmParams.put("SUBS_FREQUENCY_UNIT", "SUBSCRIPTION_FREQUENCY_UNIT");
      /* enter subscription enable retry value here, possible value is either 1 or 0 */ paytmParams.put("SUBS_ENABLE_RETRY", "SUBSCRIPTION_ENABLE_RETRY");
      /* enter subscription expiry date here in YYYY-MM-DD format */ paytmParams.put("SUBS_EXPIRY_DATE", "YYYY-MM-DD");
      /** Represents if add money is allowed at the time of subscription or not. Possible Values are: Y : In case of insufficient balance in wallet, renewal transaction will fail N : In case of insufficient balance in wallet, add money from users saved card will be attempted */ paytmParams.put("SUBS_PPI_ONLY", "SUBSCRIPTION_PPI_ONLY");
      /* payment mode that is to be charged on renewal, possible value are: "CC", "DC" */ paytmParams.put("SUBS_PAYMENT_MODE", "SUBSCRIPTION_PAYMENT_MODE");
      /* on completion of transaction, we will send you the response on this URL */ paytmParams.put("CALLBACK_URL", "YOUR_CALLBACK_URL");
      /** * Generate checksum for parameters we have * You can get Checksum JAR from https://developer.paytm.com/docs/checksum/ * Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys */ String checksum = CheckSumServiceHelper.getCheckSumServiceHelper().genrateCheckSum("YOUR_KEY_HERE", paytmParams);
      /* for Staging */ String url = "https://securegw-stage.paytm.in/order/process";
      /* for Production */ // String url = "https://securegw.paytm.in/order/process";
      /* Prepare HTML Form and Submit to Paytm */ StringBuilder outputHtml = new StringBuilder(); outputHtml.append("<html>"); outputHtml.append("<head>"); outputHtml.append("<title>Merchant Checkout Page</title>"); outputHtml.append("</head>"); outputHtml.append("<body>"); outputHtml.append("<center><h1>Please do not refresh this page...</h1></center>"); outputHtml.append("<form method='post' action='" + url + "' name='paytm_form'>"); for(Map.Entry<String,String> entry : paytmParams.entrySet()) { outputHtml.append("<input type='hidden' name='" + entry.getKey() + "' value='" + entry.getValue() + "'>"); } outputHtml.append("<input type='hidden' name='CHECKSUMHASH' value='" + checksum + "'>"); outputHtml.append("</form>"); outputHtml.append("<script type='text/javascript'>"); outputHtml.append("document.paytm_form.submit();"); outputHtml.append("</script>"); outputHtml.append("</body>"); outputHtml.append("</html>");
      Staging: https://securegw-stage.paytm.in/order/process
      Production: https://securegw.paytm.in/order/process

      For Web:

      For App:

      HTML Form POST

              <title>Merchant Check Out Page</title>
              <center><h1>Please do not refresh this page...</h1></center>
                  <form method="post" action="https://securegw-stage.paytm.in/order/process" name="f1">
                  <table border="1">
                          <input type="hidden" name="REQUEST_TYPE" value="SUBSCRIBE">
                          <input type="hidden" name="SUBS_SERVICE_ID" value="SUBS7878049">
                          <input type="hidden" name="SUBS_AMOUNT_TYPE" value="VARIABLE">
                          <input type="hidden" name="SUBS_MAX_AMOUNT" value="2">
                          <input type="hidden" name="SUBS_FREQUENCY" value="1">
                          <input type="hidden" name="SUBS_FREQUENCY_UNIT" value="DAY">
                          <input type="hidden" name="SUBS_ENABLE_RETRY" value="1">
                          <input type="hidden" name="SUBS_EXPIRY_DATE" value="2019-06-10">
                          <input type="hidden" name="SUBS_PPI_ONLY" value="Y">
                          <input type="hidden" name="SUBS_PAYMENT_MODE" value="PPI">
                          <input type="hidden" name="SSO_TOKEN" value="29215774-7b11-457e-bf99-c58f17ca5600">
                          <input type="hidden" name="SUBS_START_DATE" value="2019-04-10">
                          <input type="hidden" name="SUBS_GRACE_DAYS" value="0">
                          <input type="hidden" name="MID" value="TIMESI54326042593468">
                          <input type="hidden" name="ORDER_ID" value="OREDR_20190410144451">
                          <input type="hidden" name="CUST_ID" value="CUST001">
                          <input type="hidden" name="INDUSTRY_TYPE_ID" value="Retail">
                          <input type="hidden" name="CHANNEL_ID" value="WEB">
                          <input type="hidden" name="TXN_AMOUNT" value="1">
                          <input type="hidden" name="WEBSITE" value="dineoutWEB">
                          <input type="hidden" name="CALLBACK_URL" value="http://localhost/paytmkit/pgResponse.php">
                          <input type="hidden" name="SUBS_RETRY_COUNT" value="1">
                          <input type="hidden" name="CHECKSUMHASH" value="RvthE5zjtUWU5DPZteTjViJkYEF0Rc7nov4Y+m55YYrfztaW7wgbmnUz5Kyb/0NtjauqQeGhVDk8HNgsEF4PAC+51PaE/gAG37wSSzcHH7Q=">
                  <script type="text/javascript">

      Step 3 :

      Customer fills the payment details and is redirected to bank page for authorization. Once the transaction is completed, Paytm updates the subscription contracts and posts the response on your callback URL.

      SUBS_IDString (50)Unique subscription id generated by Paytm for identifying a subscription.
      MIDString (20)This is a unique identifier provided to every merchant by Paytm
      TXNIDString (64)This is a unique Paytm transaction ID that is issued by Paytm for each transaction
      ORDERIDString (50)Unique reference ID for a transaction which is generated by merchant and sent in the request
      BANKTXNIDString (250)The transaction ID sent by the bank. In case of Paytm proprietary instruments too, there is unique reference number generated by Pat's system. In case the transaction does not reach the bank, this will be NULL or empty string. Primary reason for this is user dropping out of the payment flow before the transaction reaches to bank to servers
      TXNAMOUNTString (10)Amount paid by customer in INR
      CURRENCYString (3)Currency in which the transaction has taken place. Currently only "INR" is the supported currency of transaction
      STATUSString (20)This contains the transaction status and has only three values: TXN_SUCCESS, TXN_FAILURE and PENDING
      RESPCODEString (10)Codes refer to a particular reason of payment failure/success. List in this PDF
      RESPMSGString (500)Description message is linked with each respcode. List in this PDF
      TXNDATEDateTimeDate and Time of transaction in the format "yyyy-MM-dd HH:mm:ss.S"Example: "2015-11- 02 11:40:46.0"
      GATEWAYNAMEString (15)Gateway used by Paytm to process the transactions. By pay modes, the details are provided below
      Credit, Debit cards, UPI - Gateway used to process the transaction. For example, if HDFC gateway has been used to process SBI credit card transactions, the value will be HDFC
      Net banking - Net banking transactions are not routed via gateway. Hence issuing bank name is passed in this field
      Paytm Wallet - Wallet
      Postpaid - PAYTMCC
      BANKNAMEString (500)Name of issuing bank of the payment instrument used by customer. By pay modes, the details are provided below
      Credit, debit cards - Name of the issuing bank. Example in case customer uses SBI's credit card, the value will be "SBI"
      Paytm Wallet - Wallet
      PAYMENTMODEString (15)The payment mode used by customer for transaction
      Credit card – CC
      Debit card - DC
      Paytm wallet – PPI
      Postpaid - PAYTMCC
              <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
              <title>Paytm Secure Online Payment Gateway</title>
              <table align='center'>
                  <td><STRONG>Transaction is being processed,</STRONG></td>
                  <td><font color='blue'>Please wait ...</font></td>
                  <td>(Please do not press 'Refresh' or 'Back' button</td>
          <FORM NAME='TESTFORM' ACTION='http://localhost/paytmkit/pgResponse.php' METHOD='POST'>
                  <input type='hidden' name='CURRENCY' value='INR'>
                  <input type='hidden' name='CUST_ID' value='CUST001'>
                  <input type='hidden' name='GATEWAYNAME' value='WALLET'>
                  <input type='hidden' name='RESPMSG' value='Txn Success'>
                  <input type='hidden' name='BANKNAME' value='WALLET'>
                  <input type='hidden' name='PAYMENTMODE' value='PPI'>
                  <input type='hidden' name='MID' value='TIMESI54326042593468'>
                  <input type='hidden' name='RESPCODE' value='01'>
                  <input type='hidden' name='TXNID' value='20190410111212800110168568200397294'>
                  <input type='hidden' name='TXNAMOUNT' value='1.00'>
                  <input type='hidden' name='ORDERID' value='OREDR_20190410144451'>
                  <input type='hidden' name='STATUS' value='TXN_SUCCESS'>
                  <input type='hidden' name='BANKTXNID' value='6637676'>
                  <input type='hidden' name='TXNDATE' value='2019-04-10 14:45:34.0'>
                  <input type='hidden' name='CHECKSUMHASH' value='1VQoUt4ue+HzD11zDHAG8lNK6RZDDIxBVByUODQhs6OEkBOrd2ucJrr9CFBpMyHHjfL5tXeoTP4IPBgR
                  <input type='hidden' name='SUBS_ID' value='17963'>
          <script type="text/javascript">  document.forms[0].submit();</script>    

      Step 4 :

      Checksumhash received in response of transaction needs to be verifiedon server using Paytm library with all the parameters in key-value pairs. Code snippets and Github links for the checksum utility are provided here

      $paytmParams = $_POST;
      $paytmChecksum = isset($_POST["CHECKSUMHASH"]) ? $_POST["CHECKSUMHASH"] : "";
      $isValidChecksum = verifychecksum_e($paytmParams, $merchantKey, $paytmChecksum);
      if($isValidChecksum == "TRUE") {
          echo "<b>Checksum Matched</b>";
      } else {
          echo "<b>Checksum MisMatch</b>";

      For Web:

      For App:

      Step 5 :

      Validate transaction response via server side request using Transaction Status API. The status returned should be treated as the final status of the transaction.

      Step 6 :

      Based on the agreed contract, send Paytm a renewal transaction request using the Renewal API. In case the renewal transaction fails, re-attempt the renewal transaction. Two important things here:

      • Renewal transaction is validated against the renewal contract. Once validated, the transaction is accepted and response is provided in the Renewal API
      • Once the transaction is processed by Paytm, we will post the status on your configured callback URL. Additionally you can do a status query from time to time using Transaction Status API

      Step 7 :

      Subscription can be cancelled using Cancel API. Once cancelled, the subscription ID can not be renewed. In a rare case that the subscription API gets timed out, you can retry cancelling the subscription using the same subscription ID. If you receive a response like “content not found”, then subscription is already cancelled.

      On completion of your integration

      Post completion of integration on your staging environment, do one complete subscription cycle, which will involve the following -

      • Creation of subscriptions using different payment methods
      • Performing a renewal transaction
      • Cancelling a subscription

      Once you attempt a test transaction using test paymodes credentials, do the following -

      • Ensure you re-verify transaction response with the Transaction Status API via a server-to-server call in the payment flow and not separately as a one time activity
      • See the transaction details in “Test Data” mode on your Dashboard
      • Once the test transaction is complete, move your code to live environment with production account details. Note that production accounts details are available after you have activated your account on the dashboard

      In case of any issues with integration, please get in touch.

      Types of subscriptions supported by Paytm

      Listed below are the type of subscriptions we support with attributes required for configuration -

      Based on amount charged at the time of renewal

      Fixed subscription amount

      Applicable when the renewal amount is the same as the amount paid by a user while creation of the subscription. For example, monthly housing maintenance payments.

      Attributes required for creating fixed amount subscriptions are -

      • TXN_AMOUNT = the fixed amount to be charged

      Variable subscription amount

      Applicable when the renewal amount is different from the amount paid by a user while creation of the subscription. For example, mobile postpaid bill payments.

      Attributes required to create variable amount subscriptions are -

      • TXN_AMOUNT = First upfront amount to be charged to start the subscription
      • SUBS_MAX_AMOUNT = Maximum renewal amount that will be charged

      Based on first amount charged at the time of creating subscription

      Free Trial Period

      Applicable when you offer a product/service for free for a certain period of time. After this trial period ends, the renewal transactions begin unless the subscription is cancelled. For example, an audio/video content platform provides a 3-month free trial followed by a fixed or variable monthly rental.

      Attributes required to create free trial subscriptions are -

      • TXN_AMOUNT = 0
      • SUBS_MAX_AMOUNT = Maximum renewal amount that will be charged

      Note: In case the subscription is created for INR 0, then transaction will be for INR 1. This is because two-factor authentication cannot be done for a payment of INR 0. This can be adjusted in the subsequent renewals or refunded to the customer using the refund API.

      Upfront amount

      Applicable when an one-time upfront amount is charged to the customer to facilitate payments such as installation, delivery etc. at the time of initiating the subscription. For example recovering the installation cost of internet router followed by fixed or variable monthly rental.

      Attributes required to create upfront amount subscriptions are -

      • TXN_AMOUNT = First upfront amount to be charged to start the subscription
      • SUBS_MAX_AMOUNT = Maximum renewal amount that will be charged

      Based on renewal payment duration

      Fixed renewal start date

      Applicable when a renewal is initiated after a fixed time interval every time. Renewal date does not depend on the date on which renewal payment was made for the previous renewal cycle. For example, bills generation dates at telecom companies are independent of customer payment dates in the previous cycle.

      Attributes required to create fixed date renewal subscriptions are -

      SUBS_START_DATE - Fixed date from which the renewal cycle needs to be initiated

      Renewal transactions needs to be initiated based on the following schedule -

      Create Request DateFrequencySubscription Start dateGrace Days1st renewal initiation date2nd renewal initiation date
      TFSG>=S and <=S+G>=S+F and <=S+G+F

      Variable renewal start date

      Applicable when a renewal is initiated after a fixed period from the last renewal. This adds support for use cases where services for the customer are discontinued if the renewal payment is not received and resumed for a fixed period once renewal payment is successfully completed. Take DTH bill payments as an example - if a monthly renewal due on the 1st of every month was successfully completed on 15th April (late renewal). in the subsequent cycle, the renewal payment can be attempted on 15th May.

      Attribute requirement for variable data renewal subscriptions are -

      SUBS_START_DATE - This attribute should not be passed

      Renewal transactions needs to be initiated based on the following schedule -

      Subscription TypeCreate Request DateFrequencySubscription Start dateGrace Days1st renewal time period2nd renewal time period
      Without Subscription start dateTF--> T+F
      Assuming this day is N
      > N+F

      Best practices for subscription

      To ensure high customer satisfaction and larger recurring revenue realization, we have compiled a few best practices for developers and businesses integrating Paytm Subscriptions into their products or services.

      Retry for failed renewals

      Most common reasons for failure of renewals is insufficient funds in the customer's account or customer issuing bank suffering temporary technical outages. You must build a renewal retry logic spaced over days to increase the chances of a successful renewal.

      Subscription Creation User Drops

      In case you redirect the user and do not get back the response from Paytm, please use the Get Subscription Status API to update the status of the Subscription at your end. You must build a get status logic spread over a couple of hours till you get a terminal status from Paytm.

      Subscription cancellation flow

      Businesses should have a subscription cancellation flow on their mobile apps, websites or via customer care. Often your customers find it hard to associate with subscription payments as they do not know about an easy subscription termination flow.

      Every time a subscription is cancelled, either by the customer or the merchant, Paytm should be updated about the same. Detailed flow for this is covered above.

      Customer Communication

      In subscription payments, your customer is charged without her explicit consent on renewal every time. Hence before creation of the subscription you need to show the following information to the customer on your app/website. Additionally you can also send a notification to the user once the subscription is created. Please find below the information to be displayed:-

      • Product and services which will be received by the customer.
      • Payment schedule (amount, start date, renewal date and payment cycle).
      • Payment instrument (debit card, credit card, bank mandate etc.) linked to this subscription.
      • Subscription termination link/steps that customer needs to follow in case she wants to stop the renewals and cancel the subscription.
      • First renewal date on which the first charge will be made.
      Note: For Paytm wallet, Paytm would send notifications to the user one day prior to the renewal due date & upon successful/failed renewal.

      Also, to avoid situations where customer is dissatisfied due to an uninformed charge (can lead to chargebacks), merchant must send adequate and timely communication to the customer. We have a list of recommended communication -

      Notification before renewal

      Before the renewal is initiated, the customer must be informed via an email/SMS/any other notification. This notification should be sent at least a day in advance. This notification should have the following information

      • Amount to be charged. In case of variable renewal amount, complete break up of the charge should be provided
      • Payment instrument details on which the charge will be made
      • Date on which renewal will be attempted
      • Subscription termination link/steps that customer needs to follow in case she wants to stop the renewals and cancel the subscription
      • Agreement/contract details like when the subscription was created/payment schedule/product and services schedule etc.

      Notification after a successful or failed renewal

      After execution of every renewal transaction, customer should be notified of the status of renewal. In case of a successful renewal, she should be notified of -

      • Amount charged
      • Payment instrument on which the charge was made
      • Date on which the next charge will be made
      • Subscription termination link/steps that customer needs to follow incase he wants to stop the renewals and cancel the subscription
      • Agreement/Contract details like when the subscription was created/payment schedule/product and services schedule etc.

      In case of a failed renewal, customer must be informed of the following -

      • Amount charged
      • Payment instrument where charge was made
      • Date on which the retry will be executed
      • Subscription termination link/steps that customer needs to follow in case she wants to stop the renewals and cancel the subscription
      • Agreement/Contract details like when the subscription was created/payment schedule/product and services schedule etc.