curl --request POST \
--url https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds \
--header 'Content-Type: application/json' \
--header 'x-api-version: <x-api-version>' \
--header 'x-client-id: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"subscription_id": "test-subs-id",
"payment_id": "test-payment-id",
"refund_id": "dummy-test-refund-id",
"refund_amount": 10,
"refund_note": "full refund",
"refund_speed": "INSTANT"
}
'import requests
url = "https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds"
payload = {
"subscription_id": "test-subs-id",
"payment_id": "test-payment-id",
"refund_id": "dummy-test-refund-id",
"refund_amount": 10,
"refund_note": "full refund",
"refund_speed": "INSTANT"
}
headers = {
"x-api-version": "<x-api-version>",
"x-client-id": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-version': '<x-api-version>',
'x-client-id': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
subscription_id: 'test-subs-id',
payment_id: 'test-payment-id',
refund_id: 'dummy-test-refund-id',
refund_amount: 10,
refund_note: 'full refund',
refund_speed: 'INSTANT'
})
};
fetch('https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds', 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://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subscription_id' => 'test-subs-id',
'payment_id' => 'test-payment-id',
'refund_id' => 'dummy-test-refund-id',
'refund_amount' => 10,
'refund_note' => 'full refund',
'refund_speed' => 'INSTANT'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-version: <x-api-version>",
"x-client-id: <api-key>",
"x-client-secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds"
payload := strings.NewReader("{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-version", "<x-api-version>")
req.Header.Add("x-client-id", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds")
.header("x-api-version", "<x-api-version>")
.header("x-client-id", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-version"] = '<x-api-version>'
request["x-client-id"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}"
response = http.request(request)
puts response.read_body{
"payment_id": "pay8643",
"cf_payment_id": "863782648",
"refund_id": "refund2",
"cf_refund_id": "ref_212",
"refund_amount": 100,
"refund_note": "test",
"refund_speed": "INSTANT",
"refund_status": "INITIATED"
}{
"message": "bad URL, please check API documentation",
"code": "request_failed",
"type": "invalid_request_error"
}{
"message": "authentication Failed",
"code": "request_failed",
"type": "authentication_error"
}{
"message": "something is not found",
"code": "somethind_not_found",
"type": "invalid_request_error"
}{
"message": "something is not found",
"code": "request_invalid",
"type": "idempotency_error"
}{
"message": "Too many requests from IP. Check headers",
"code": "request_failed",
"type": "rate_limit_error"
}{
"message": "internal Server Error",
"code": "internal_error",
"type": "api_error"
}Create a refund.
This API allows you to create refund on a successful payment. Refund amount can be partial or the full amount of the payment.
curl --request POST \
--url https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds \
--header 'Content-Type: application/json' \
--header 'x-api-version: <x-api-version>' \
--header 'x-client-id: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"subscription_id": "test-subs-id",
"payment_id": "test-payment-id",
"refund_id": "dummy-test-refund-id",
"refund_amount": 10,
"refund_note": "full refund",
"refund_speed": "INSTANT"
}
'import requests
url = "https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds"
payload = {
"subscription_id": "test-subs-id",
"payment_id": "test-payment-id",
"refund_id": "dummy-test-refund-id",
"refund_amount": 10,
"refund_note": "full refund",
"refund_speed": "INSTANT"
}
headers = {
"x-api-version": "<x-api-version>",
"x-client-id": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-version': '<x-api-version>',
'x-client-id': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
subscription_id: 'test-subs-id',
payment_id: 'test-payment-id',
refund_id: 'dummy-test-refund-id',
refund_amount: 10,
refund_note: 'full refund',
refund_speed: 'INSTANT'
})
};
fetch('https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds', 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://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'subscription_id' => 'test-subs-id',
'payment_id' => 'test-payment-id',
'refund_id' => 'dummy-test-refund-id',
'refund_amount' => 10,
'refund_note' => 'full refund',
'refund_speed' => 'INSTANT'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-version: <x-api-version>",
"x-client-id: <api-key>",
"x-client-secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds"
payload := strings.NewReader("{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-version", "<x-api-version>")
req.Header.Add("x-client-id", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds")
.header("x-api-version", "<x-api-version>")
.header("x-client-id", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.cashfree.com/pg/subscriptions/{subscription_id}/refunds")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-version"] = '<x-api-version>'
request["x-client-id"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subscription_id\": \"test-subs-id\",\n \"payment_id\": \"test-payment-id\",\n \"refund_id\": \"dummy-test-refund-id\",\n \"refund_amount\": 10,\n \"refund_note\": \"full refund\",\n \"refund_speed\": \"INSTANT\"\n}"
response = http.request(request)
puts response.read_body{
"payment_id": "pay8643",
"cf_payment_id": "863782648",
"refund_id": "refund2",
"cf_refund_id": "ref_212",
"refund_amount": 100,
"refund_note": "test",
"refund_speed": "INSTANT",
"refund_status": "INITIATED"
}{
"message": "bad URL, please check API documentation",
"code": "request_failed",
"type": "invalid_request_error"
}{
"message": "authentication Failed",
"code": "request_failed",
"type": "authentication_error"
}{
"message": "something is not found",
"code": "somethind_not_found",
"type": "invalid_request_error"
}{
"message": "something is not found",
"code": "request_invalid",
"type": "idempotency_error"
}{
"message": "Too many requests from IP. Check headers",
"code": "request_failed",
"type": "rate_limit_error"
}{
"message": "internal Server Error",
"code": "internal_error",
"type": "api_error"
}Authorizations
Client app ID. You can find your app id in the Merchant Dashboard.
Client secret key. You can find your secret key in the Merchant Dashboard.
Headers
API version to be used
Request id for the API call. Can be used to resolve tech issues. Communicate this in your tech related queries to cashfree
An idempotency key is a unique identifier you include with your API call. If the request fails or times out, you can safely retry it using the same key to avoid duplicate actions.
Path Parameters
Provide the SubscriptionId using which the subscription was created.
Body
Request body to create a subscription refund.
Request body to create a subscription refund.
A unique ID passed by merchant for identifying the subscription.
A unique ID passed by merchant for identifying the refund.
The amount to be refunded. Can be partial or full amount of the payment.
A unique ID passed by merchant for identifying the transaction.
Refund note.
Refund speed. Can be INSTANT or STANDARD. UPI supports only STANDARD refunds, Enach and Pnach supports only INSTANT refunds.
Response
Refund Initiated
Get/Create Subscription Payment Refund Response
A unique ID passed by merchant for identifying the transaction.
Cashfree subscription payment reference number.
A unique ID passed by merchant for identifying the refund.
Cashfree subscription payment refund reference number.
The refund amount.
Refund note.
Refund speed. Can be INSTANT or NORMAL.
Status of the refund.
Was this page helpful?