Get Transfer Status V1.2
curl --request GET \
--url https://payout-api.cashfree.com/payout/v1.2/getTransferStatus \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://payout-api.cashfree.com/payout/v1.2/getTransferStatus', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payout-api.cashfree.com/payout/v1.2/getTransferStatus")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://payout-api.cashfree.com/payout/v1.2/getTransferStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_body{
"status": "ERROR",
"subCode": "403",
"message": "APIs not enabled. Please fill out the [Support Form](https://merchant.cashfree.com/merchants/landing?env=prod&raise_issue=1)"
}Transfers V1.2
Get Transfer Status V1.2
Use these details to get details of a particular transfer. You can pass referenceId or transferId to fetch the details.
GET
/
payout
/
v1.2
/
getTransferStatus
Get Transfer Status V1.2
curl --request GET \
--url https://payout-api.cashfree.com/payout/v1.2/getTransferStatus \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://payout-api.cashfree.com/payout/v1.2/getTransferStatus', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payout-api.cashfree.com/payout/v1.2/getTransferStatus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payout-api.cashfree.com/payout/v1.2/getTransferStatus")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://payout-api.cashfree.com/payout/v1.2/getTransferStatus")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_body{
"status": "ERROR",
"subCode": "403",
"message": "APIs not enabled. Please fill out the [Support Form](https://merchant.cashfree.com/merchants/landing?env=prod&raise_issue=1)"
} This API will be retired soon. Please plan to migrate to the latest version, Transfers V2.
Click to view the response codes.
Click to view the response codes.
| Sub code | Status | Message | Next action |
|---|---|---|---|
| 200 | SUCCESS | Details of transfer with referenceId (or transferId) XXXX | - |
| 403 | ERROR | Token is not valid | Verify the generated token. |
| 403 | ERROR | IP not whitelisted | Whitelist the IP address. |
| 404 | ERROR | ReferenceId is invalid or does not exist | Enter a valid reference ID. |
| 404 | ERROR | TransferId is invalid or does not exist | Enter a valid transfer ID. |
| 412 | ERROR | Token missing in the request | Enter a valid token in the API request. |
| 422 | ERROR | Please provide referenceId or transferId to fetch details | Enter a valid referenceId or transferId. |
| 520 | ERROR | Unknown error occurred | Try again after some time. |
Click to view the failed reasons.
Click to view the failed reasons.
FAILED / REJECTED / REVERSED Reasons (reason field will be available only for these 3 statuses)
| Reason (in API response) | Category | Description | Next action |
|---|---|---|---|
| BANK_GATEWAY_ERROR | Bank | Technical error at the bank | |
| BENE_BANK_DECLINED | Bank | Rejected by Beneficiary bank due to business reasons | |
| FAILED | Bank | No explicit failure reason from the bank | |
| INVALID_IFSC_FAIL | Customer | Invalid ifsc code provided for bank account | Enter a valid IFSC. |
| INVALID_ACCOUNT_FAIL | Customer | Bank account is invalid | Enter valid bank account information. |
| RETURNED_FROM_BENEFICIARY | Bank | Immediate reversal from the beneficiary bank | |
| INSUFFICIENT_BALANCE | Merchant | Merchant balance is exhausted, need to add funds | |
| IMPS_MODE_FAIL | Bank | IMPS mode not supported for the beneficiary | |
| RTGS_MODE_FAIL | Bank | RTGS mode not supported (only for RTGS) | |
| REINITIALIZE_TRANSFER_LATER | Bank | Technical error at the bank, retry later | Retry after some time. |
| NRE_ACCOUNT_FAIL | Customer | Customer bank account is an NRE account | |
| ACCOUNT_BLOCKED | Customer | Customer bank account is blocked | |
| DEST_LIMIT_REACHED | Bank | Transfer limit to beneficiary exceeded | |
| INVALID_MODE_FAIL | Bank | Transfer mode not valid for beneficiary | |
| NPCI_UNAVAILABLE | Bank | NPCI in unavailable | |
| BENEFICIARY_BANK_OFFLINE | Bank | Beneficiary bank is offline | |
| INVALID_AMOUNT_FAIL | Merchant | Amount is invalid for the given transfer mode | Enter a valid amount for the provided transfer mode. |
| SUSPECTED_TRANSFER | Customer | Suspicious transfer identified | |
| BENE_NAME_DIFFERS | Customer | Beneficiary name not matching with bank records | Enter the beneficiary name as per bank records. |
| DISABLED_MODE | Merchant | Transfer mode not enabled for the account | Enter a different transfer mode for the account or enable the transfer mode before initiating the transfer request. |
| AMAZON_AMOUNT_EXCEED | Merchant | Amount should be less than 10000 for Amazon Pay mode | Enter a transfer amount that is lesser than Rs. 10000. |
| BENEFICIARY_BLACKLISTED | Merchant | Beneficiary is blacklisted | Enter a beneficiary that is not in the blacklist. |
| PAYOUT_INACTIVE | Merchant | Payout account is not active | |
| INVALID_TRANSFER_AMOUNT | Merchant | Transfer amount is invalid | Enter a valid transfer amount. |
| BENEFICIARY_NOT_EXIST | Merchant | Beneficiary does not exist | Enter valid beneficiary details. |
| BENEFICIARY_INVALID_MODE | Merchant | Mode Not valid for Beneficiary | Enter a different transfer mode for the specified beneficiary. |
| INVALID_BENE_ACCOUNT_OR_IFSC | Merchant | Invalid bank account number or ifsc provided | Enter a valid bank account number or IFSC. |
| BENEFICIARY_NAME_DIFFERS | Customer | Beneficiary name not matching with bank records | Enter the beneficiary name as per bank records. |
| ANY_OTHER_REASON | Bank | No reason provided for the failure/reversal | |
| INVALID_OR_NO_SUCH_ACCOUNT_TYPE | Customer | Invalid account |
List of possible transfer statuses returned by Cashfree Payments.
List of possible transfer statuses returned by Cashfree Payments.
| Transfer status | Description |
|---|---|
| SUCCESS | Transfer completed successfully. Acknowledged flag in the response tells whether the beneficiary bank has provided acknowledgement of the transfer request. |
| ERROR | There was an error while requesting the transfer. See sub status code received for more details on why the error occurred. Example: Wrong IFSC. |
| FAILED | The transfer has failed. |
| PENDING | The request is getting processed. Query transfer status (/getTransferStatus) after some time to see whether the request was successful/failed. |
| REVERSED | Transfer rejected by the beneficiary bank. The payout balance gets credited back with the amount charged. You don’t receive this when you are attempting a transfer but might see this when querying for transfer status (after a couple of hours). Configure the webhook endpoint to be notified in such cases. |
Query Parameters
Reference ID of the transaction. (Either referenceId or transferId is mandatory)
Transfer ID of the transaction.
Was this page helpful?
⌘I