Submit Auth Request

To set up the mandate or accept the first payment from the user
Subscription Flow TypeLink to Refer
Subscription – UPI Intent FlowSubmit Auth Request -UPI Intent Flow
Subscription – Collect FlowSubmit Auth Request – Collect Flow
Subscription – QR FlowSubmit Auth Request – QR Flow
Request ParametersSubmit Auth Request – Request Parameters
Response ParametersSubmit Auth Request – Response Parameters
S2S CallbackSubmit Auth Request – S2S Callback

Headers

FieldMandatoryDescription
Content-TypeYesapplication/json
X-VerifyYesSHA256(base64 encoded payload + “/v3/recurring/auth/init” + salt key) + ### + salt index
X-CALLBACK-URLYesThe callback URL to receive the server-to-server callback response.

Subscription – UPI Intent Flow

UPI Autopay Intent – When authWorkflowType is TRANSACTION

SAMPLE Payload (ANDROID)
{
    "merchantId": "MID12345",
    "merchantUserId": "U123456789",
    "subscriptionId": "OMS2006110139450123456789",
    "authRequestId": "TX123456789",
    "amount": 39900,
    "paymentInstrument": {
      "type": "UPI_INTENT",
      "targetApp": "com.phonepe.app"
    },
    "deviceContext" : {
    "deviceOS" : "ANDROID"
    }
} 
SAMPLE Payload (IOS)
{  
  "merchantId" : "MERCHANTUAT",
  "subscriptionId" : "OMS2301191527473651197003",  
  "merchantUserId" : "5330F4FB-C66C-4646-8691-11544B580547",
  "authRequestId" : "D2500CEFBBE481095A43D6D5B7A787F",
  "amount" : 39900,
  "paymentInstrument": {
    "type": "UPI_INTENT",
    "targetApp":"PHONEPE"
  },
  "deviceContext" : {
    "deviceOS" : "IOS",
    "merchantCallBackScheme" : "iOSIntentIntegration"       //Only for iOS
  }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

SAMPLE Request (ANDROID)
{
  "request":"ewogICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAibWVyY2hhbnRVc2VySWQiOiAiVTEyMzQ1Njc4OSIsCiAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAiYW1vdW50IjogMzk5MDAsCiAgInBheW1lbnRJbnN0cnVtZW50IjogewogICAgInR5cGUiOiAiVVBJX0lOVEVOVCIsCiAgICAidGFyZ2V0QXBwIjogImNvbS5waG9uZXBlLmFwcCIKICB9LAogICJkZXZpY2VDb250ZXh0IjogewogICAgImRldmljZU9TIjogIkFORFJPSUQiCiAgfQp9"
}
SAMPLE Request (IOS)
{
  "request":"ewogICAgImFtb3VudCI6IDM5OTAwLCAKICAgICJhdXRoUmVxdWVzdElkIjogIkQyNTAwQ0VGQkJFNDgxMDk1QTQzRDZENUI3QTc4N0YiLCAKICAgICJkZXZpY2VDb250ZXh0IjogewogICAgICAgICJkZXZpY2VPUyI6ICJJT1MiLCAKICAgICAgICAibWVyY2hhbnRDYWxsQmFja1NjaGVtZSI6ICJpT1NJbnRlbnRJbnRlZ3JhdGlvbiIKICAgIH0sIAogICAgIm1lcmNoYW50SWQiOiAiTUVSQ0hBTlRVQVQiLCAKICAgICJtZXJjaGFudFVzZXJJZCI6ICI1MzMwRjRGQi1DNjZDLTQ2NDYtODY5MS0xMTU0NEI1ODA1NDciLCAKICAgICJwYXltZW50SW5zdHJ1bWVudCI6IHsKICAgICAgICAidGFyZ2V0QXBwIjogIlBIT05FUEUiLCAKICAgICAgICAidHlwZSI6ICJVUElfSU5URU5UIgogICAgfSwgCiAgICAic3Vic2NyaXB0aW9uSWQiOiAiT01TMjMwMTE5MTUyNzQ3MzY1MTE5NzAwMyIKfQ=="
}

UPI Autopay Intent – When authWorkflowType is PENNY_DROP

SAMPLE Payload (ANDROID)
{
    "merchantId": "MID12345",
    "merchantUserId": "U123456789",
    "subscriptionId": "OMS2006110139450123456789",
    "authRequestId": "TX123456789",
    "paymentInstrument": {
      "type": "UPI_INTENT",
      "targetApp": "com.phonepe.app"
    } 
   "deviceContext" : {
      "deviceOS" : "ANDROID"
   }
} 
SAMPLE Payload (IOS)
{
  "merchantId" : "MERCHANTUAT",
  "subscriptionId" : "OMS2301191527473651197003",  
  "merchantUserId" : "5330F4FB-C66C-4646-8691-11544B580547",
  "authRequestId" : "D2500CEFBBE481095A43D6D5B7A787F",
  "paymentInstrument": {
    "type": "UPI_INTENT",
    "targetApp":"PHONEPE"
  },
  "deviceContext" : {
    "deviceOS" : "IOS",
    "merchantCallBackScheme" : "iOSIntentIntegration"
  }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

SAMPLE Request (ANDROID)
{
 "request":"ewogICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAibWVyY2hhbnRVc2VySWQiOiAiVTEyMzQ1Njc4OSIsCiAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAicGF5bWVudEluc3RydW1lbnQiOiB7CiAgICAidHlwZSI6ICJVUElfSU5URU5UIiwKICAgICJ0YXJnZXRBcHAiOiAiY29tLnBob25lcGUuYXBwIgogIH0sCiAgImRldmljZUNvbnRleHQiOiB7CiAgICAiZGV2aWNlT1MiOiAiQU5EUk9JRCIKICB9Cn0="
}
SAMPLE Request (IOS)
{
  "request":"ewogICJtZXJjaGFudElkIiA6ICJNRVJDSEFOVFVBVCIsCsKgICJzdWJzY3JpcHRpb25JZCIgOiAiT01TMjMwMTE5MTUyNzQ3MzY1MTE5NzAwMyIswqAgCsKgICJtZXJjaGFudFVzZXJJZCIgOiAiNTMzMEY0RkItQzY2Qy00NjQ2LTg2OTEtMTE1NDRCNTgwNTQ3IiwKwqAgImF1dGhSZXF1ZXN0SWQiIDogIkQyNTAwQ0VGQkJFNDgxMDk1QTQzRDZENUI3QTc4N0YiLAogICJwYXltZW50SW5zdHJ1bWVudCI6IHsKICAgICJ0eXBlIjogIlVQSV9JTlRFTlQiLAogICAgInRhcmdldEFwcCI6IlBIT05FUEUiCiAgfSwKwqAgImRldmljZUNvbnRleHQiIDogewrCoCDCoCAiZGV2aWNlT1MiIDogIklPUyIsCsKgIMKgICJtZXJjaGFudENhbGxCYWNrU2NoZW1lIiA6ICJpT1NJbnRlbnRJbnRlZ3JhdGlvbiIKwqAgfQp9"
}

Handling Android and iOS Intent

Android
  • The value of “paymentInstrument.type” should be “UPI_INTENT“.
  • The value of “paymentInstrument.targetApp”
    • [Android] should be the package name of the UPI app selected for the payment. Supported Apps – PhonePe, Paytm, and BHIM UPI.
  • To invoke the app-specific Intent, set the package name using setPackage() as shown below based on the app selected by the user.
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(intentUrl));
i.setPackage(APP_PACKAGE_NAME);
startActivityForResult(i, PHONEPE_REQUEST_CODE);
IOS
  • The value of “paymentInstrument.type” should be “UPI_INTENT“.
  • The value of “paymentInstrument.targetApp”
    • [iOS] should be the static value of the UPI app selected by the user. Supported Apps(Values) – PhonePe(PHONEPE) and Gpay (GPAY).
  • For merchantCallbackScheme, Refer to this link.

Sample Response

SAMPLE RESPONSE (ANDROID)
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your request has been successfully completed.",
  "data": {
    "redirectType": "INTENT",
    "redirectUrl": "upi://mandate?pn=SUBSCRIBEMID&pa=MID12345@ybl&tid=YBL6663638d0312408a8f54f7df8f1bd6b9&tr=P1812191027266848105909&am=399.00&mam=399.00&cu=INR&url=https://phonepe.com&mc=7299&tn=Payment%20for%20TXN123456789&utm_source=TXN123456789&utm_medium=MID12345&utm_campaign=SUBSCRIBE_AUTH"
  }
}
SAMPLE RESPONSE (IOS – PhonePe)
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your request has been successfully completed.",
  "data": {
    "redirectType": "INTENT",
    "redirectUrl": "ppe://mandate?pn=SUBSCRIBEMID&pa=MID12345@ybl&tid=YBL6663638d0312408a8f54f7df8f1bd6b9&tr=P1812191027266848105909&am=399.00&mam=399.00&cu=INR&url=https://phonepe.com&mc=7299&tn=Payment%20for%20TXN123456789&utm_source=TXN123456789&utm_medium=MID12345&utm_campaign=SUBSCRIBE_AUTH"
  }
}

Subscription – Collect Flow

Collect – When authWorkflowType is TRANSACTION

{
  "merchantId": "MID12345",
  "merchantUserId": "U123456789",
  "subscriptionId": "OMS2006110139450123456789",
  "authRequestId": "TX123456789",
  "amount": 39900,
  "paymentInstrument": {
    "type": "UPI_COLLECT",
    "vpa": "test-vpa@ybl"
  }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

{
   "request": "ewogICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAibWVyY2hhbnRVc2VySWQiOiAiVTEyMzQ1Njc4OSIsCiAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAiYW1vdW50IjogMzk5MDAsCiAgInBheW1lbnRJbnN0cnVtZW50IjogewogICAgInR5cGUiOiAiVVBJX0NPTExFQ1QiLAogICAgInZwYSI6ICJ0ZXN0LXZwYUB5YmwiCiAgfQp9"
}

Collect – When authWorkflowType is PENNY_DROP

{
  "merchantId": "MID12345",
  "merchantUserId": "U123456789",
  "subscriptionId": "OMS2006110139450123456789",
  "authRequestId": "TX123456789",
  "paymentInstrument": {
    "type": "UPI_COLLECT",
    "vpa": "test-vpa@ybl"
  }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

{
   "request": "ewogICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAibWVyY2hhbnRVc2VySWQiOiAiVTEyMzQ1Njc4OSIsCiAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAicGF5bWVudEluc3RydW1lbnQiOiB7CiAgICAidHlwZSI6ICJVUElfQ09MTEVDVCIsCiAgICAidnBhIjogInRlc3QtdnBhQHlibCIKICB9Cn0="
}

Subscription – Collect Flow

  • The value of “paymentInstrument.type” should be UPI_COLLECT
  • The value of “paymentInstrument.vpa” should be the UPI ID entered by the user.

Validate VPA

Kindly validate the VPA entered by the user using the Verify VPA API. Only if the VPA is valid then the Create Subscription API followed by Submit Auth Request API with VPA in the request payload have to be passed.

Sample Response

{
  "success": true,
  "code": "SUCCESS",
  "message": "Your request has been successfully completed.",
  "data": null
}

Subscription – QR Flow

QR – When authWorkflowType is TRANSACTION

{
    "merchantId": "MID12345",
    "merchantUserId": "U123456789",
    "subscriptionId": "OMS2006110139450123456789",
    "authRequestId": "TX123456789",
    "amount": 39900,
    "paymentInstrument": {
        "type": "UPI_QR"
    }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

{
   "request": "ewogICAgIm1lcmNoYW50SWQiOiAiTUlEMTIzNDUiLAogICAgIm1lcmNoYW50VXNlcklkIjogIlUxMjM0NTY3ODkiLAogICAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICAgImF1dGhSZXF1ZXN0SWQiOiAiVFgxMjM0NTY3ODkiLAogICAgImFtb3VudCI6IDM5OTAwLAogICAgInBheW1lbnRJbnN0cnVtZW50IjogewogICAgICAgICJ0eXBlIjogIlVQSV9RUiIKICAgIH0KfQ=="
}

QR – When authWorkflowType is PENNY_DROP

{
    "merchantId": "MID12345",
    "merchantUserId": "U123456789",
    "subscriptionId": "OMS2006110139450123456789",
    "authRequestId": "TX123456789",
    "paymentInstrument": {
        "type": "UPI_QR"
    }
}

Convert the JSON Payload to Base64 Encoded Payload

The above JSON request payload should be converted to the Base64 Encoded Payload and then the request should be sent in the below format.

{
   "request": "ewogICAgIm1lcmNoYW50SWQiOiAiTUlEMTIzNDUiLAogICAgIm1lcmNoYW50VXNlcklkIjogIlUxMjM0NTY3ODkiLAogICAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICAgImF1dGhSZXF1ZXN0SWQiOiAiVFgxMjM0NTY3ODkiLAogICAgInBheW1lbnRJbnN0cnVtZW50IjogewogICAgICAgICJ0eXBlIjogIlVQSV9RUiIKICAgIH0KfQ=="
}

Subscription – QR Flow

  • The value of “paymentInstrument.type” should be UPI_QR

Sample Response

{
  "success": true,
  "code": "SUCCESS",
  "message": "Your request has been successfully completed.",
  "data": {
    "redirectType": "QR",
    "redirectUrl": "upi://mandate?mn=Autopay&ver=01&purpose=14&mid=SWIGGY8&am=499.00&pa=SWIGGY8%40ybl&cu=INR&mc=5812&mg=ONLINE&pn=Swiggy&Rev=Y&QRts=2022-01-17T11%3A27%3A01.168%2B05%3A30&Mode=24&QRexpire=2022-01-17T11%3A32%3A01.168%2B05%3A30&Amrule=MAX&txnType=CREATE&Validitystart=17012022&Validityend=17012023&qrMedium=00&Block=N&Share=Y&Tr=TX312131232223231234&Recur=ASPRESENTED&orgid=500044&sign=MEYCIQDjgF5nN2zh67CfJZ80/M1Tb4ElF+6QKiUoIsNSMf5X9QIhAJBDW0WPIStMzCIzLfsNM7xX1cRTUBzExBUGIPFT8RrZ"
  }
}

Request Parameters

Field NameData TypeMandatoryDescription
merchantIdStringYesMID provide by PhonePe
merchantUserIdStringYesUser’s unique Id maintained by merchant
subscriptionIdStringYesPhonePe subscription Id
authRequestIdStringYesMerchant’s unique transaction Id
Note:
authRequestId length should be less than 36 characters.
– Should be alphanumeric only.
amountLongConditional● Mandatory when
authWorkflowType is
TRANSACTION

 

● Do not pass when
authWorkflowType is
PENNY_DROP

paymentInstrument.typeStringYesUPI_INTENT – For UPI Intent flow
UPI_COLLECT – For UPI Collect flow
UPI_QR – For UPI QR flow
paymentInstrument.targetAppStringConditionalMandatory if paymentInstrument.type = UPI_INTENT

 

Possible values for iOS:
● PHONEPE
● GPAY

Possible values for Android:
Android package name
(For example:
● com.phonepe.app for PHONEPE
● net.one97.paytm for PAYTM)

paymentInstrument.vpaStringConditionalMandatory if paymentInstrument.type = UPI_COLLECT

Response Parameters

Field NameData TypeDescriptionComments
redirectTypeStringValues:
● WEB
● INTENT
The WEB redirectType is not
supported in v1
redirectUrlStringBased on the redirect type, url is
either an intent url or web url.
The web url will not be
returned in v1.
codeString“SUCCESS”,
“INTERNAL_SERVER_ERROR”,
“SUBSCRIPTION_NOT_FOUND”,
“SUBSCRIPTION_EXPIRED”,
“INVALID_SUBSCRIPTION_STATE”,
“BAD_REQUEST”,
“INVALID_TRANSACTION_ID”
 

S2S Callback – Submit Auth Request

Callback for Submit Auth Request

The server to server callback for Submit Auth Request will have the “callbackType”: “AUTH”.

Validations

Validate the checksum and amount which has been passed with the response received in the Server to Server callback.

S2S Callback – ACTIVE state

When authWorkflowType is TRANSACTION

{
   "response": "ewogICJzdWNjZXNzIjogdHJ1ZSwKICAiY29kZSI6ICJTVUNDRVNTIiwKICAibWVzc2FnZSI6ICJZb3VyIHN1YnNjcmlwdGlvbiBpcyBhY3RpdmUuIiwKICAiZGF0YSI6IHsKICAgICJjYWxsYmFja1R5cGUiOiAiQVVUSCIsCiAgICAibWVyY2hhbnRJZCI6ICJNSUQxMjM0NSIsCiAgICAiYXV0aFJlcXVlc3RJZCI6ICJUWDEyMzQ1Njc4OSIsCiAgICAidHJhbnNhY3Rpb25EZXRhaWxzIjogewogICAgICAicHJvdmlkZXJSZWZlcmVuY2VJZCI6ICJQMTgwNjE1MTMyMzA5MzkwMDU1NDk1NyIsCiAgICAgICJhbW91bnQiOiAzOTkwMCwKICAgICAgInN0YXRlIjogIkNPTVBMRVRFRCIsCiAgICAgICJwYXlSZXNwb25zZUNvZGUiOiAiU1VDQ0VTUyIsCiAgICAgICJwYXltZW50TW9kZXMiOiBbCiAgICAgICAgewogICAgICAgICAgIm1vZGUiOiAiQUNDT1VOVCIsCiAgICAgICAgICAiYW1vdW50IjogMzk5MDAsCiAgICAgICAgICAidXRyIjogIjgxNjYyNjUyMTYxNiIsCiAgICAgICAgICAiaWZzYyI6ICJIREZDMDAwMDk5OSIsCgkJCQkJIm1hc2tlZEFjY291bnROdW1iZXIiOiAiWFhYWFhYOTk5IiwKCQkJCQkidW1uIjogIjkxMjNkYWMzNTdkZTEyM2NiMmNiZDQ1MjgzNDEyMzA1QHlibCIKICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAic3Vic2NyaXB0aW9uRGV0YWlscyI6IHsKICAgICAgInN1YnNjcmlwdGlvbklkIjogIk9NUzIwMDYxMTAxMzk0NTAxMjM0NTY3ODkiLAogICAgICAic3RhdGUiOiAiQUNUSVZFIgogICAgfQogIH0KfQ=="
}
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your subscription is active.",
  "data": {
    "callbackType": "AUTH",
    "merchantId": "MID12345",
    "authRequestId": "TX123456789",
    "transactionDetails": {
      "providerReferenceId": "P1806151323093900554957",
      "amount": 39900,
      "state": "COMPLETED",
      "payResponseCode": "SUCCESS",
      "paymentModes": [
        {
          "mode": "ACCOUNT",
          "amount": 39900,
          "utr": "816626521616",
          "ifsc": "HDFC0000999",
          "maskedAccountNumber": "XXXXXX999",
          "umn": "9123dac357de123cb2cbd45283412305@ybl"
        }
      ]
    },
    "subscriptionDetails": {
      "subscriptionId": "OMS2006110139450123456789",
      "state": "ACTIVE"
    }
  }
}

When authWorkflowType is PENNY_DROP

{
   "response": "ewogICJzdWNjZXNzIjogdHJ1ZSwKICAiY29kZSI6ICJTVUNDRVNTIiwKICAibWVzc2FnZSI6ICJZb3VyIHN1YnNjcmlwdGlvbiBpcyBhY3RpdmUuIiwKICAiZGF0YSI6IHsKICAgICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAgICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAgICJzdWJzY3JpcHRpb25EZXRhaWxzIjogewogICAgICAic3Vic2NyaXB0aW9uSWQiOiAiT01TMjAwNjExMDEzOTQ1MDEyMzQ1Njc4OSIsCiAgICAgICJzdGF0ZSI6ICJBQ1RJVkUiCiAgICB9CiAgfQp9"
}
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your subscription is active.",
  "data": {
    "merchantId": "MID12345",
    "authRequestId": "TX123456789",
    "subscriptionDetails": {
      "subscriptionId": "OMS2006110139450123456789",
      "state": "ACTIVE"
    }
  }
}

S2S Callback – FAILED state

When authWorkflowType is TRANSACTION

{
   "response": "ewogICJzdWNjZXNzIjogdHJ1ZSwKICAiY29kZSI6ICJTVUNDRVNTIiwKICAibWVzc2FnZSI6ICJZb3VyIHN1YnNjcmlwdGlvbiBpcyBmYWlsZWQuIiwKICAiZGF0YSI6IHsKICAgICJjYWxsYmFja1R5cGUiOiAiQVVUSCIsCiAgICAibWVyY2hhbnRJZCI6ICJNSUQxMjM0NSIsCiAgICAiYXV0aFJlcXVlc3RJZCI6ICJUWDEyMzQ1Njc4OSIsCiAgICAidHJhbnNhY3Rpb25EZXRhaWxzIjogewogICAgICAicHJvdmlkZXJSZWZlcmVuY2VJZCI6ICJQMTgwNjE1MTMyMzA5MzkwMDU1NDk1NyIsCiAgICAgICJhbW91bnQiOiAzOTkwMCwKICAgICAgInN0YXRlIjogIkZBSUxFRCIsCiAgICAgICJwYXlSZXNwb25zZUNvZGUiOiAiQVVUSE9SSVpBVElPTl9GQUlMRUQiLAogICAgICAicGF5bWVudE1vZGVzIjogWwogICAgICAgIHsKICAgICAgICAgICJtb2RlIjogIkFDQ09VTlQiLAogICAgICAgICAgImFtb3VudCI6IDM5OTAwLAogICAgICAgICAgInV0ciI6ICI4MTY2MjY1MjE2MTYiCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgInN1YnNjcmlwdGlvbkRldGFpbHMiOiB7CiAgICAgICJzdWJzY3JpcHRpb25JZCI6ICJPTVMyMDA2MTEwMTM5NDUwMTIzNDU2Nzg5IiwKICAgICAgInN0YXRlIjogIkZBSUxFRCIKICAgIH0KICB9Cn0="
}
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your subscription is failed.",
  "data": {
    "callbackType": "AUTH",
    "merchantId": "MID12345",
    "authRequestId": "TX123456789",
    "transactionDetails": {
      "providerReferenceId": "P1806151323093900554957",
      "amount": 39900,
      "state": "FAILED",
      "payResponseCode": "AUTHORIZATION_FAILED",
      "paymentModes": [
        {
          "mode": "ACCOUNT",
          "amount": 39900,
          "utr": "816626521616"
        }
      ]
    },
    "subscriptionDetails": {
      "subscriptionId": "OMS2006110139450123456789",
      "state": "FAILED"
    }
  }
}

When authWorkflowType is PENNY_DROP

{
   "response": "ewogICJzdWNjZXNzIjogdHJ1ZSwKICAiY29kZSI6ICJTVUNDRVNTIiwKICAibWVzc2FnZSI6ICJZb3VyIHN1YnNjcmlwdGlvbiBpcyBmYWlsZWQuIiwKICAiZGF0YSI6IHsKICAgICJtZXJjaGFudElkIjogIk1JRDEyMzQ1IiwKICAgICJhdXRoUmVxdWVzdElkIjogIlRYMTIzNDU2Nzg5IiwKICAgICJzdWJzY3JpcHRpb25EZXRhaWxzIjogewogICAgICAic3Vic2NyaXB0aW9uSWQiOiAiT01TMjAwNjExMDEzOTQ1MDEyMzQ1Njc4OSIsCiAgICAgICJzdGF0ZSI6ICJGQUlMRUQiCiAgICB9CiAgfQp9"
}
{
  "success": true,
  "code": "SUCCESS",
  "message": "Your subscription is failed.",
  "data": {
    "merchantId": "MID12345",
    "authRequestId": "TX123456789",
    "subscriptionDetails": {
      "subscriptionId": "OMS2006110139450123456789",
      "state": "FAILED"
    }
  }
}

Integration Steps on iOS App Side

  1. In your Info.plist, create or append a new Array type node LSApplicationQueriesSchemes to append the following values:
<array>
  <string>ppemerchantsdkv1</string>
  <string>ppemerchantsdkv2</string>
  <string>ppemerchantsdkv3</string>  
  <string>gpay</string>
</array>

2. Create a URLType for your app (Deeplink), if not already present.
For example, we have used: iOSIntentIntegration. (You can create your own identifier for your app) and pass it in the deviceContext.merchantCallBackScheme of Submit Auth request.

{"method":"post","url":"/v3/recurring/auth/init","auth":"required","results":{"codes":[{"name":"PhonePe Intent","code":"{\n \"success\": true,\n \"code\": \"SUCCESS\",\n\t\"message\": \"Your request has been successfully completed.\",\n \"data\": {\n \"redirectType\": \"INTENT\",\n \"redirectURL\": \"ppe://mandate?pn=SUBSCRIBEMID&pa=MID12345@ybl&tid=YBL6663638d0312408a8f54f7df8f1bd6b9&tr=P1812191027266848105909&am=399.00&mam=399.00&cu=INR&url=https://phonepe.com&mc=7299&tn=Payment%20for%20TXN123456789&utm_source=TXN123456789&utm_medium=MID12345&utm_campaign=SUBSCRIBE_AUTH\"\n }\n}","language":"json","status":200},{"code":"{\n \"success\": true,\n \"code\": \"SUCCESS\",\n\t\"message\": \"Your request has been successfully completed.\",\n \"data\": {\n \"redirectType\": \"INTENT\",\n \"redirectURL\": \"upi://mandate?mn=Autopay&ver=01&purpose=14&mid=SWIGGY8&am=499.00&pa=SWIGGY8%40ybl&cu=INR&mc=5812&mg=ONLINE&pn=Swiggy&Rev=Y&QRts=2022-01-17T11%3A27%3A01.168%2B05%3A30&Mode=24&QRexpire=2022-01-17T11%3A32%3A01.168%2B05%3A30&Amrule=MAX&txnType=CREATE&Validitystart=17012022&Validityend=17012023&qrMedium=00&Block=N&Share=Y&Tr=TX312131232223231234&Recur=ASPRESENTED&orgid=500044&sign=MEYCIQDjgF5nN2zh67CfJZ80/M1Tb4ElF+6QKiUoIsNSMf5X9QIhAJBDW0WPIStMzCIzLfsNM7xX1cRTUBzExBUGIPFT8RrZ\"\n }\n}","language":"json","status":200,"name":"Open Intent"},{"code":"{\n \"success\": true,\n \"code\": \"SUCCESS\",\n\t\"message\": \"Your request has been successfully completed.\",\n \"data\": null\n}","language":"json","name":"Collect Flow","status":200},{"code":"{\n \"success\": false,\n \"code\": \"SUBSCRIPTION_NOT_FOUND\",\n \"message\": \"No Subscription found with the given details.\",\n \"data\": {}\n}","language":"json","status":400}]},"params":[{"name":"Content-Type","type":"string","enumValues":"","default":"application/json","desc":"","required":true,"in":"header","ref":"","_id":"60ae0a6955a0b40191b799b9"},{"name":"X-VERIFY","type":"string","enumValues":"","default":"","desc":"SHA256(base64 encoded payload + \"/v3/recurring/auth/init\" + salt key) + ### + salt index","required":true,"in":"header","ref":"","_id":"60ae0a6955a0b40191b799b8"},{"name":"request","type":"string","enumValues":"","default":"","desc":"base64 encoded payload","required":true,"in":"body","ref":"","_id":"60b75a868b7dff0029b91340"},{"name":"X-CALLBACK-URL","type":"string","enumValues":"","default":"","desc":"Dynamic callback URL for server to server callback","required":false,"in":"header","ref":"","_id":"60ed7fc9cab3580064c20cb9"}],"apiSetting":"63bb01b11abcf7046d98754c","examples":{"codes":[]}}
https://api-preprod.phonepe.com/apis/pg-sandbox