Returns, cancellations, and refunds
Learn how to cancel a payment or request a refund for your customers
This functionality is available for the following models:
☑ Acquirer
☑ Aggregator
With Kushki you can process 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 cancellation (Void)
It occurs when the return request is processed during the same day of the transaction and up to 3 hours after completion. 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.
2. Refund
When an online cancellation is not possible, a refund will be required. This type of refund can take up to 7 business days to be processed and up to 20 business days to appear on your customer’s bank statement, depending on the card issuing bank.
Refund can occur in the following scenarios:
- When the return request is processed more than 3 hours after the moment when the customer’s payment took place or in a different day.
- 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?
The return process can have two outcomes: Void or Refund. The return will be done as void if it is requested up to 3 hours after the transaction was approved and during the same day. If it exceeds that time, then it will be processed as a refund. Refunds can take up to 7 business days to process and up to 20 business days to reflect on your customer’s statement, depending on the card issuing bank.
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 environmentbody: {fullResponse: true},json:true};request(options, function(error, response, body) {if (error) throw new Error(error);console.log(body);});
import requestsurl = "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()
What is the time limit to request a refund?
The time limit for your customers to request a refund varies depending on the affiliation model:
Aggregation (Gateway) | Kushki Acquiring (Local) | Kushki Acquiring (International |
---|---|---|
Up to 90 days after a payment has been made. | Up to 120 days after a payment has been made. | Up to 120 days after a payment has been made. |
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 environmentbody: {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 requestsurl = "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