Devoluciones, anulaciones y reembolsos

Aprende cómo anular un pago o solicitar un reembolso para tus clientes

Esta funcionalidad se encuentra disponible para los siguientes modelos:

☑ Adquirente
☑ Agregador

Con Kushki puedes procesar devoluciones de pagos con tarjeta débito y crédito en estado aprobado. Una vez aprobada una devolución, los fondos se retornarán a la tarjeta de tu cliente.

Las devoluciones pueden ser de dos clases, según el día y la hora en que se procese la transacción original y la solicitud de anulación:

1. Anulación en línea (Void)

Se da cuando la solicitud de devolución se procesa durante el mismo día de la transacción, antes de las 23:00. Realizaremos hasta tres intentos de devolución con el procesador y si es exitosa, la compra se eliminará del extracto de movimientos de tu cliente y se devolverá el monto de la compra a su cuenta.

Anulación en línea ES

2. Reembolso (Refund)

Cuando no sea posible realizar una anulación en línea, será necesario realizar un reembolso. El reembolso se puede dar en los siguientes escenarios:

  • Cuando la solicitud de devolución se procesa luego de las 23:59 del día de aprobación de la transacción.
  • Cuando fallan los tres intentos de anulación en línea.
  • Cuando la solicitud de anulación se realiza en un día diferente al de la transacción original.

Este tipo de reembolsos pueden tardar hasta 7 días hábiles en procesarse y hasta 45 días hábiles en reflejarse en el extracto de tu cliente, dependiendo del banco emisor de la tarjeta. A continuación una ilustración del proceso de reembolso:

Reembolso manual ES

¿Cómo procesar una devolución?

El proceso de devolución puede tener dos resultados: Anulación (void) o Reembolso (refund). La devolución se hará como anulación (void) si se solicita hasta las 23:59 horas del día de la transacción. Si excede ese tiempo, entonces será procesada como reembolso (refund). Los reembolsos pueden tardar hasta 7 días hábiles en procesarse y hasta 45 días hábiles en reflejarse en el extracto de tu cliente, dependiendo del banco emisor de la tarjeta.

Puedes procesar devoluciones desde tu Consola según lo explicado aquí o integrar en tu aplicación nuestro método de API de solicitud de cancelación para que tus compradores puedan solicitar desde tu sitio la devolución de una compra.

Para solicitar la anulación de un pago es necesario utilizar el ticketNumber de la transacción original como path parameter y enviar tu credencial privada, tal y como se muestra en el siguiente ejemplo:

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'DELETE',
headers: {
'Private-Merchant-Id': 'your-private-merchat-id', // Reemplaza con tu Private merchant id
'Content-Type': 'application/json' },
url: 'https://api-uat.kushkipagos.com/v1/charges/ticket number ', // Ambiente de prueba
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',// Reemplaza esto por tu Private Key
'Content-Type: application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody()

¿Cuál es el tiempo límite para solicitar una devolución?

El tiempo límite para que tus clientes soliciten una devolución varía por modelo de afiliación:

Agregación (Gateway)Adquiriencia Kushki
Hasta 30 días después de realizado un cobro.Hasta 120 días después de realizado un cobro.

¿Cómo procesar una devolución parcial?

Puedes permitirle a tus clientes solicitar devoluciones parciales usando el mismo endpoint de anulación de transacciones, por lo tanto es posible que un solo cargo tenga varias solicitudes de devolución asociadas, siempre y cuando la suma de estas no sobrepase el monto total de la transacción original.

Las devoluciones parciales pueden solicitarse manualmente, a través de la Consola o vía API, según lo explicado a continuación.

Devoluciones parciales vía API

Para solicitar una devolución parcial, puedes usar el endpoint de solicitud de anulaciones. Debes enviar el ticketNumber como path parameter, tu credencial privada y el desglose de monto e impuestos en el objeto amount. Asegúrate que el cálculo de los impuestos y montos sea el correcto.

  • Javascript
  • Python
  • PHP
var request = require("request");
var options = {
method: 'DELETE',
headers: {
'Private-Merchant-Id': 'your-private-merchat-id', // Reemplaza con tu Private merchant id
'Content-Type': 'application/json'
},
url: 'https://api-uat.kushkipagos.com/v1/charges/ticket number ', // Ambiente de prueba
body: {
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 requests
url = "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',// Reemplaza esto por tu Private Key
'Content-Type: application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody()

¿Cómo conocer el estado de una devolución?

Puedes conocer el estado de una anulación desde tu Consola según lo explicado aquí o configurar un Webhook de devoluciones, en el cual Kushki te notificará cuando se complete exitosamente una solicitud de devolución, ya sea anulación (void) o reembolso (refund).


Webhook para devoluciones

Consulta el estado de tus devoluciones