Single Transfer Integration
Single Transfer Integration with Payouts allows you to make instant payments to a beneficiary through the APIs using different payment modes as illustrated in the following figure:

Step 1. Generate authentication token
Payouts Integration begins with access token generation. You should have an Access Token for authentication while accessing Payouts Endpoints. Without authentication, payouts core APIs can’t be accessed.
For this purpose, PayU provides two methods to generate the authentication token as follows:
Note:The authentication tokens have a TTL (Time To Live) and are required to be refreshed after a fixed interval of time. A Refresh Token API can be requested to obtain a renewed access token. For more information on this, refer to Refresh Token API - Payouts
Step 2. Get account details
The getAccountDetail API returns complete account details of the merchant’s Payouts account.
Environment
Test Environment | https://uatoneapi.payu.in/payout/merchant/getAccountDetail |
Production Environment | https://payout.payumoney.com/payout/merchant/getAccountDetail |
Sample request
curl -X GET \
https://test.payumoney.com/payout/merchant/getAccountDetail
-H 'cache-control: no-cache' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'authorization: bearer aab9dc927c4a68af7eb95ef694f0b48bb731c5a1a7111786d6658d774db14188' \
-H 'payoutMerchantId: 1111123'
Sample response
{
"status": 0,
"msg": null,
"code": null,
"data": {
"payoutMerchantId": 1111123,
"uuid": "11e8-5a8f-05faaaa4-84a5-020d245326e4",
"virtualAccountNumber": "PAYUIN1111123",
"transferableAmount": 0,
"balance": 94003,
"lowBalance": false,
"ifsc": "YESB0CMSNOC",
"type": "current",
"clientId": "6f8bb4951e030d4d7349e64a144a534778673585f86039617c167166e9154f7e",
"transitAccountNumber": null
}
}
Step 3. Initiate single transfer
Request for initiation of a single transfer to the beneficiary using Initiate Single Transfer API. For Try IT experience, refer to Initiate Transfer API.
You can transfer through various payment modes described in Initiate Transfer API:
- IMPS, NEFT or RTGS Payment Request
- UPI Payment Request
- Phone Payment Request
- MasterCard Payment Request
- VISA Card Payment Request
- Credit Card Payment Request Environment
Test Environment | https://uatoneapi.payu.in/payout/v2/payment |
Production Environment | https://payout.payumoney.com/payout/payment |
Sample request
IMPS, NEFT or RTGS Payment Request
[
{
"beneficiaryAccountNumber": "51234567890",
"beneficiaryIfscCode": "HDFC0001234",
"beneficiaryName": "Payu",
"beneficiaryEmail": "[email protected]",
"beneficiaryMobile": "9876473627",
"purpose": "Payment from Company",
"amount": 1234.12,
"batchId": "1",
"merchantRefId": "123asdfad3",
"paymentType": "IMPS",
"retry" : false
}
]
UPI Payment Request
[
{
"beneficiaryName": "Payu",
"beneficiaryEmail": "[email protected]",
"beneficiaryMobile": "9876473627",
"purpose": "Payment from Company",
"amount": 1234.12,
"batchId": "1",
"merchantRefId": "123",
"paymentType": "UPI",
"vpa" : "ankush.pokarana@ybl",
"retry" : false
}
]
Sample response
Success response
{
"status": 0,
"msg": "Requests are in process. Will send response of individual request on webhooks set by you",
"code": null,
"data": []
}
Failure response
{
"status": 1,
"msg": null,
"code": null,
"data": [
{
"batchId": "1",
"merchantRefId": "111",
"error": "beneficiary account number can not be empty. ",
"code": [1004]
}
]
}
Step 4. Check transfer status
Fetch the status of the transfer by posting the merchant’s reference ID as a parameter using the Check Transfer Status API. For more information on Payouts statuses, refer to Payouts Lifecycle. For Try-It experience for Check Transfer Status API, refer to Check Transfer Status API. Environment
Test Environment | https://uatoneapi.payu.in/payout/payment/listTransactions |
Production Environment | https://payout.payumoney.com/payout/payment/listTransactions |
Sample request
curl -X POST \
https://test.payumoney.com/payout/payment/listTransactions \
-H 'authorization: Bearer 2678f236346281e6029e3430da1a721af29bb3546d6acbc27e6aadd7fca72605' \
-H 'cache-control: no-cache' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'payoutmerchantid: 1111122' \
-d 'transferStatus=QUEUED&from=01%2F01%2F2019&to=01%2F01%2F2019&page=1&pageSize=100&merchantRefId=&batchId=1'
Sample response
{
"status": 0,
"msg": null,
"code": null,
"data": {
"payoutMerchantId": null,
"noOfPages": 1,
"totalElements": 1,
"currentPage": 0,
"totalAmount": 0.0,
"succesTxn": 0,
"pendingTxn": 0,
"transactionDetails": [
{
"txnId": 71870,
"batchId": "smartSendBatch",
"merchantRefId": "0101010031",
"purpose": "Payout",
"amount": 1.0,
"txnStatus": "FAILED",
"txnSubStatus": null,
"txnSource": "SMART_SEND",
"txnDate": "2022-08-22T05:56:13.000+0000",
"scheduledTxnDate": "2022-08-22T05:56:13.000+0000",
"payuTransactionRefNo": "PAYOUT1661147773462lrSLcvHSc1K",
"beneficiaryName": "Customer",
"beneficiaryCardNo": null,
"msg": "Internal Error while validating vpa account",
"responseCode": null,
"transferType": "UPI",
"bankTransactionRefNo": null,
"nameWithBank": null,
"lastStatusUpdateDate": "2022-08-22T05:56:15.000+0000",
"succeedOn": null,
"fee": null,
"tax": null,
"txnStatusDescription": "Internal Error while validating vpa account",
"custom1": null,
"custom2": null,
"custom3": null,
"nameMatch": null
}
]
}
}
The status of a particular transaction has to be determined only from the field txnStatus in thetransactionDetails JSON against the merchantRefId.
On receiving the following JSON Response in the Check Transfer Status API, the transaction status is not determined and has to considered as unidentified or Pending by merchant.
{
"status": 0,
"msg": null,
"code": null,
"data": {
"payoutMerchantId": null,
"noOfPages": 0,
"totalElements": 0,
"currentPage": 0,
"totalAmount": 0.0,
"succesTxn": 0,
"pendingTxn": 0,
"transactionDetails": []
}
}
Step 5. Integrate with webhooks
You can integrate with webhooks to track the status of your payment. For more information, refer to the Payouts Webhooks.
Updated 1 day ago