Returns, cancellations, and refunds

Learn how to cancel a payment or request a refund for your customers

With Kushki you can process debit and credit card payment returns with an approved status. Once a return is approved, the funds will be returned to your customer’s card.

Returns can be of two types, according to the day and the time the original transaction and the cancellation request are processed:

1. Online or automatic cancellation (Void)

It occurs when the return request is processed during the same day of the transaction, before . We will make up to three return attempts with the processor and if successful, the purchase will be removed from your customer’s bank statement and the purchase amount will be returned to his/her account.

Online Cancellation Void EN

2. Manual refund

When an online cancellation is not possible, a manual refund will be required. This type of refund can take up to 7 business days to processed and up to 45 business days to appear on your customer’s bank statement, depending on the card issuing bank.

Manual Refund EN

Manual refund can occur in the following scenarios:

  • When the return request is processed after 20:59 on the day on which the customer’s payment took place.
  • When the three online cancellation attempts fail.
  • When the cancellation request is made on a day other than that of the original transaction.

How to process a return?

You can process returns from your Administration Console as explained here or integrate our cancellations request API method into your application, so that your buyers can request the return of a purchase from your website.

In order to request the cancellation of a payment, it is necessary to use the ticketNumber of the original transaction as path parameter and send your private credential, as shown in the example below:

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'DELETE',
headers: {
'Private-Merchant-Id': 'your-private-merchat-id', // Replace with your Private merchant id
'Content-Type': 'application/json' },
url: 'https://api-uat.kushkipagos.com/v1/charges/ticket number ', // Test environment
body: {
fullResponse: true
},
json:true
};
request(options, function(error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
import requests
url = "https://api-uat.kushkipagos.com/v1/charges/ticket number"
payload = '{"fullResponse":true}'
headers = {
"Private-Merchant-Id": "your-private-merchat-id",
"Content-Type": "application/json",
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{\"fullResponse\":true}');
$request->setRequestUrl('https://api-uat.kushkipagos.com/v1/charges/6383937262783');
$request->setRequestMethod('DELETE');
$request->setBody($body);
$request->setHeaders(array(
'Private-Merchant-Id: 'your-private-merchat-id',// Replace this with your Private Key
'Content-Type: application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody()

How to process a partial return?

You can allow your customers to request partial returns using the same transaction cancellation endpoint. Therefore, a single charge may have multiple related return requests, provided that the sum thereof does not exceed the total amount of the original transaction.

Partial returns can be requested manually, through the Administration Console or via API, as explained below.

Partial returns via API

In order to request a partial return, you can use the cancellation request endpoint. You must send the ticketNumber as path parameter, your private credential and the amount and taxes breakdown in the amount object. Make sure that the calculation of taxes and amounts is correct.

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'DELETE',
headers: {
'Private-Merchant-Id': 'your-private-merchat-id', // Replace with your Private merchant id
'Content-Type': 'application/json'
},
url: 'https://api-uat.kushkipagos.com/v1/charges/ticket number ', // Test environment
body: {
fullResponse: true,
amount: {
subtotalIva: 10000,
subtotalIva0: 0,
ice: 0,
iva: 0,
currency: 'COP'
}
},
json: true
};
request(options, function(error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
import requests
url = "https://api-uat.kushkipagos.com/v1/charges/ticket number"
payload = '{\"fullResponse\":true,\"amount\":{\"subtotalIva\":10000,\"subtotalIva0\":0,\"ice\":0,\"iva\":0,\"currency\":\"COP\"}}'
headers = {
"Private-Merchant-Id": "your-private-merchat-id",
"Content-Type": "application/json",
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{"fullResponse":true,"amount":{"subtotalIva":10000,"subtotalIva0":0,"ice":0,"iva":0,"currency":"COP"}}');
$request->setRequestUrl('https://api-uat.kushkipagos.com/v1/charges/6383937262783');
$request->setRequestMethod('DELETE');
$request->setBody($body);
$request->setHeaders(array(
'Private-Merchant-Id: 'your-private-merchat-id',// Replace this with your Private Key
'Content-Type: application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody()

How to check the status of a return?

You can check the status of a cancellation from your Administration Console as explained here or set up a Webhook for returns, in which Kushki will notify you when a return request, either a cancellation (void) or a refund, is successfully completed.


Recommended

Check the status of your returns