Setup Subscription for Mobile Integration


This document explains how to set up subscriptions using the Autopay API.

For Android and iOS app integration, please refer to the respective setup guides below:

These platform-specific documents provide the required steps to configure and integrate Autopay within your mobile applications.

EnvironmentHTTP MethodAPI
SandboxPOSThttps://api-preprod.phonepe.com/apis/pg-sandbox/checkout/v2/sdk/order
ProductionPOSThttps://api.phonepe.com/apis/pg/checkout/v2/sdk/order
Header NameHeader ValueDescription
Content-Typeapplication/json
AuthorizationO-Bearer <access_token>Pass access_token received in Authorization call
Request Parameters
Parameter NameData TypeDescriptionMandatoryConstraints
merchantOrderIdStringUnique merchant order id generated by merchant.YesMax Length = 63 characters.
No Special characters allowed except underscore “_” and hyphen “-“
amountLongOrder amount in paisa.Yes
Min value = 100 paise
expireAtDateTimeOrder expiry in seconds. If not passed default value will be used.NoMin Value = 300, Max Value = 3600
metaInfoObjectMerchant defined meta info to store additional information.
Same data will be returned in status and callback response.
NoFor udf1 to udf10, there is no constraint.
For udf11 to udf15, alphanumeric values with _-+@. are allowed.
paymentFlowObjectAdditional details required by this flowYes

The metaInfo object contains additional parameters, which are explained in the table below.

Request Parameters of metoInfo Object:
Parameter NameData TypeDescriptionMandatory (Yes/No)Constraints
metaInfo.udf1-15StringOptional details you can add for more informationNoMaximum length for Udf1-10 = 256 characters
Maximum length for Udf11-15 = 50 characters

⚠️ Do Not Rename metainfo Parameters!


It is mandatory to keep the parameter names udf1, udf2, etc., exactly as they are in the metainfo block. Renaming these key values will result in a production error.

The paymentFlow object contains additional parameter, which is explained in the table below.

Request Parameters of paymentFlow Object:
Parameter NameData TypeDescriptionMandatory (Yes/No)Constraints
paymentFlow.typeStringType of payment flowYes
Valued allowed = [PG_CHECKOUT]
Sample Request
{
    "merchantOrderId": "{{merchantOrderId}}",
    "amount": 47900,
    "metaInfo": {
        "udf1": "some meta info of max length 256",
        "udf2": "some meta info of max length 256",
        "udf3": "some meta info of max length 256",
        "udf4": "some meta info of max length 256",
        "udf5": "some meta info of max length 256",
        "udf6": "some meta info of max length 256",
        "udf7": "some meta info of max length 256",
        "udf8": "some meta info of max length 256",
        "udf10": "some meta info of max length 256",
        "udf11": "some meta info of max length 50",
        "udf12": "some meta info of max length 50",
        "udf13": "some meta info of max length 50",
        "udf14": "some meta info of max length 50",
        "udf15": "some meta info of max length 50"
    },
    "paymentFlow": {
        "type": "SUBSCRIPTION_CHECKOUT_SETUP",
        "message": "Payment message used for collect requests",
        "merchantUrls": {
            "redirectUrl": "www.google.com",
            "cancelRedirectUrl": "www.google.com"
        },
        "subscriptionDetails": {
            "subscriptionType": "RECURRING",
            "merchantSubscriptionId": "{{merchantSubId}}",
            "authWorkflowType": "TRANSACTION",
            "amountType": "FIXED",
            "maxAmount": 47900,
            "frequency": "ON_DEMAND",
	    "productType": "UPI_MANDATE",
            "expireAt": 1779689282000
        }
    },
    "expireAfter": 3000
}
Sample Response
{
  "orderId": "OMO123456789",
  "state": "PENDING",
  "expireAt": 1703756259307,
  "token": ""
}

Now that the subscription is successfully set up, you can begin collecting payments based on the selected cycle. This is a two-step process:

  • With the subscription active, the next phase is managing the payment lifecycle. This begins with Notify Redemption, which prepares the collection amount based on the subscription cycle.
  • Once the notification is successfully processed, you must trigger Redemption Execute . This API call is the final step that requests the system to debit the user’s bank account and complete the recurring payment transaction.
  • Check Redemption Status after initiating the payment, it is critical to confirm the transaction outcome. Use this API to verify if the redemption was successful, pending, or failed.
  • Pause or Unpause: Temporarily suspend a subscription and reactivate it when needed.
  • Cancel: Permanently terminate a subscription to stop all future billing cycles.

By following these steps, from setting up the subscription and notifying the user to executing the redemption and managing the lifecycle, you have successfully integrated the recurring payment flow. Your system is now ready to process automated transactions efficiently.

Is this article helpful?