Refund

API flow to refund against a payment transaction made through PhonePe. A full or partial refund is possible against a transaction.

<html-block html=”

Request Headers

“>

Header NameHeader Value
Content-Typeapplication/json
X-VERIFYSHA256(base64 encoded payload + “/v3/credit/backToSource” + salt key) + ### + salt index
{
    "merchantId": "DemoMerchant",
    "transactionId": "TX123456789",
    "providerReferenceId": "PPXXXXX",
    "amount": 100,
    "merchantOrderId": "OD1234",
    "subMerchant": "DemoMerchant",
    "message": "refund for cancelled order"
}
{
  "request": "eyJtZXJjaGFudE9yZGVySWQiOiAiT0QxMjM0IiwgInN1Yk1lcmNoYW50IjogIkRlbW9NZXJjaGFudCIsICJhbW91bnQiOiAxMDAsICJtZXNzYWdlIjogInJlZnVuZCBmb3IgY2FuY2VsbGVkIG9yZGVyIiwgIm1vYmlsZU51bWJlciI6ICI5eHh4eHh4eHh4IiwgInNob3J0TmFtZSI6ICJBbWl0IiwgInRyYW5zYWN0aW9uSWQiOiAiVFgxMjM0NTY3ODkiLCAibWVyY2hhbnRVc2VySWQiOiAiVTEyMzQ1Njc4OSIsICJtZXJjaGFudElkIjogIkRlbW9NZXJjaGFudCIsICJlbWFpbCI6ICJhbWl0eHh4NzVAZ21haWwuY29tIn0"
}

<html-block html=”

Request Parameters

“>

Parameter NameTypeDescriptionMandatory
merchantIdSTRINGUnique Merchant ID assigned to the merchant by PhonePeYes
transactionIdSTRINGUnique Transaction ID generated by the merchant to track this request to PhonePe.
This should be different from transaction ID of debit transaction.
Yes
originalTransactionIdSTRINGMerchant transaction Id of forward transaction which needs to be reversed.Yes
providerReferenceIdSTRINGPhonePe transaction id of the original forward payment.
Note : use only one of originalTransactionId, providerReferenceId only
Yes
amountLONGReversal amount in paise. Upto a max of amount of original payment transaction.Yes
merchantOrderIdSTRINGOrder ID for the merchant transactionYes
subMerchantSTRINGTag to categorize merchant transactionNo
messageSTRINGShort messageYes

<html-block html=”

Response Parameters

“>

Parameter NameTypeDescription
successBOOLEANSuccess status of the request
codeENUMSee list of response codes below
messageSTRINGShort message about code
transactionIdSTRINGUnique Transaction ID generated by the merchant to track this request to PhonePe
merchantIdSTRINGUnique Merchant ID assigned to the merchant by PhonePe
amountLONGTransaction amount in paise
statusSTRINGStatus of the request
mobileNumberSTRINGMobile number of the user
providerReferenceIdSTRINGPhonePe payment transaction id against which the reversal is to be done
payResponseCodeSTRINGPhonePe internal status code

<html-block html=”

Refund API Response Codes

“>

CodeDescription
BAD_REQUESTInvalid request
AUTHORIZATION_FAILEDX-VERIFY header is incorrect
TRANSACTION_NOT_FOUNDOriginal transaction not found
INTERNAL_SERVER_ERRORSomething went wrong. Refund might get initiated (need to check status with check transaction status API before retrying the refund)
PAYMENT_SUCCESSPayment is successful
PAYMENT_ERRORPayment failed
PAYMENT_PENDINGPayment is pending. It does not indicate failed payment. Refund might get initiated (need to check status with check transaction status API before retrying the refund)
TIMED_OUTRefund timed out. Refund might get initiated (need to check status with check transaction status API before retrying the refund)
REVERSAL_WINDOW_BREACHEDTime for refunding the transaction has breached. Please process refund manually

<html-block html=”

Refund API – Pay Response Codes

“>

CodepayResponseCodeDescription
PAYMENT_ERRORDUPLICATE_TXN_REQUESTIf the transaction id is used already for refund request.
PAYMENT_ERROREXCESS_REFUND_AMOUNTIf the amount requested for refund is more than forward payment or If refund is already done
PAYMENT_ERRORWALLET_NOT_ACTIVATEDIf the user has disabled the wallet. Contact user to know the source for refund.
{“method”:”post”,”url”:”/v3/credit/backToSource/”,”auth”:”never”,”examples”:{“codes”:[]},”apiSetting”:”5ecf9143b5bd210023b3b738″,”results”:{“codes”:[{“code”:”{\n \”success\”: true,\n \”code\”: \”PAYMENT_SUCCESS\”,\n \”message\”: \”Your payment is successful.\”,\n \”data\”: {\n \”transactionId\”: \”TX123456789\”,\n \”merchantId\”: \”DemoMerchant\”,\n \”amount\”: 100,\n \”status\”: \”SUCCESS\”,\n \”mobileNumber\”: \”9xxxxxxxxxx\”,\n \”providerReferenceId\”: \”PPXXXXX\”,\n \”payResponseCode\”: \”SUCCESS\”\n }\n}”,”language”:”json”,”name”:”Success Response”,”status”:200},{“code”:”{ \”success\”:false,\n \”code\”:\”BAD_REQUEST\”,\n \”message\”:\”Please check the inputs you have provided.\”,\n \”data\”:{}\n}”,”language”:”json”,”status”:400,”name”:”Failure Response”}]},”params”:[{“name”:”Content-type”,”type”:”string”,”enumValues”:””,”default”:”application/json”,”desc”:””,”required”:true,”in”:”header”,”ref”:””,”_id”:”5a16ae7f38e7e00012818403″},{“name”:”X-VERIFY”,”type”:”string”,”enumValues”:””,”default”:””,”desc”:”SHA256(base64 encoded payload + \”/v3/credit/backToSource\” + salt key) + ### + salt index”,”required”:true,”in”:”header”,”ref”:””,”_id”:”5a16ae7f38e7e00012818402″},{“name”:”request”,”type”:”string”,”enumValues”:””,”default”:””,”desc”:”base64 encoded payload”,”required”:true,”in”:”body”,”ref”:””,”_id”:”5a180b9c620d9b001cb71704″}]}
https://mercury-uat.phonepe.com