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 and debit card payment returns in an approved status. Once a return is approved, the funds will be returned to your customer’s card.
Refunds can be of two kinds, depending on the day and time the original transaction and reversal request is processed:
1. Online Void
This is when the return request is processed during the same day as the transaction, before 23:00. We will make up to three return attempts with the processor and if successful, the purchase will be removed from your customer’s transaction statement and the purchase amount will be refunded to your customer’s account.
2. Refund
When an online cancellation is not possible, a refund will be required. A refund can be given in the following scenarios:
- When the refund request is processed after 23:59 on the transaction approval day.
- When all three online reversal attempts fail.
- When the reversal request is made on a different day than the original transaction day.
These types of refunds can take up to 7 business days to process and up to 45 business days to reflect on your customer’s statement, depending on the card issuing bank. Below is an illustration of the refund process:
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 until 23:59 hours on the day of the transaction. If it exceeds that time, then it will be processed as a refund. Refunds may take up to 7 business days to process and up to 45 business days to reflect on your customer’s statement, depending on the card issuing bank.
You can process returns from your Console as explained here or integrate our cancel request API method into your application so that your buyers can request from your site the return of a purchase.
To request a reversal of a payment you need to use the ticketNumber
of the original transaction as path parameter and send your private credential, as shown in the following example:
- 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 |
---|---|
Up to 30 days after a payment has been made. | Up to 120 days after a payment has been made. |
How to process a partial refund?
You can allow your customers to request partial refunds using the same transaction reversal endpoint, so it is possible for a single charge to have multiple refund requests associated with it, as long as the sum of these does not exceed the total amount of the original transaction.
Partial refunds can be requested manually, through the Console or via API, as explained below.
Partial refunds via API
To request a partial refund, you can use the cancellation request endpoint. You must send the ticketNumber
as path parameter, your private credential and the amount and tax breakdown in the amount
object. Make sure that the tax and amount calculation 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: 1000,subtotalIva0: 0,iva: 0,currency: 'MXN'}},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\":100,\"subtotalIva0\":0,\"ice\":0,\"iva\":0,\"currency\":\"MXN\"}}'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":100,"subtotalIva0":0,"ice":0,"iva":0,"currency":"MXN"}}');$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 know the status of a return?
You can check the status of a void from your Console as explained here or set up a Webhook-chargebacks, in which Kushki will notify you when a return request is successfully completed, either void or refund.
Webhook for returns
Check the status of your returns