Dispersa a cuentas bancarias

Reparte tu dinero a las cuentas bancarias de tus clientes

El proceso para dispersar pagos con transferencia consiste en entregar dinero a las cuentas de tus clientes. En otras palabras, si dispones de la información bancaria de estos, puedes usar tu cuenta de dispersión de Kushki y por medio de transferencia enviar el dinero a sus cuentas, usando la lógica que prefieras.

Ideal para:

  • Pago a proveedores o vendedores
  • Marketplaces
  • Aplicaciones de delivery

Detalles de operación

El proceso de dispersión en Perú se realiza a través del siguiente flujo: Comercio > Kushki > Procesador > Usuario.

ParámetroDetalle
Horario de procesamientoLunes a viernes de 7:00 a 20:00. Sábados de 7:00 a 14:30. Domingos y feriados no se procesa
Días de procesamientoLunes a sábado
Tiempo en aprobarse una transacción a cuentas BCPHasta 40 minutos
Tiempo en aprobarse una transacción a otros bancosMonto mayor a S/. 420,000.00: si se instruyen las transacciones antes de las 2:00pm se abona el mismo día. Después de las 2:00pm se abonan al siguiente día hábil.
Monto menor a S/. 420,000.00: si se instruyen las transacciones antes de las 12:00pm se abona el mismo día. Después de las 12:00pm se abonan al siguiente día hábil.
Notificación de estado finalEl banco notificará una vez que los recursos hayan sido abonados al destinatario
Monto mínimo por transacciónS/. 1.00
Monto máximo por transacciónA cuentas BCP: sin límite
A otros bancos: S/. 420,000.00
Tipos de cuenta destinatariasCuentas persona y empresa

Monedas soportadas

El servicio de transfer out en Perú se encuentra disponible en moneda local (PEN) y dólares (USD).

Flujo

El flujo que integrarás es el siguiente:

Flujo transfer out

Aquí aprenderás cómo integrar las dispersiones de dinero con transferencia.

1. Obtén el listado de bancos asociados

El primer paso es consultar el listado de bancos disponibles para realizar la transferencia. Para ello, debes consumir este endpoint, el cual, te mostrará las instituciones bancarias disponibles para poder realizar la transacción.

  • Javascript
  • Python
  • PHP
var request = require('request');
var bankList = [];
var options = {
'method': 'GET',
'url': 'https://api-uat.kushkipagos.com/payouts/transfer/v1/bankList', // Test environment
'headers': {
'Public-Merchant-Id': '' // Replace with your Public Key
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
bankList = response.body;
// Submit your code to filter the bank you need and send its id in token request
});
import requests
url = "https://api-uat.kushkipagos.com/payouts/transfer/v1/bankList" // Test environment
bankList = []
payload = {}
headers = {
'Public-Merchant-Id': '' // Replace with your Public Key
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
bankList = response.text
// Submit your code to filter the bank you need and send its id in token request
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://api-uat.kushkipagos.com/payouts/transfer/v1/bankList'); // Test environment
$request->setRequestMethod('GET');
$request->setOptions(array());
$request->setHeaders(array(
'Public-Merchant-Id' => '' // Replace with your Public Key
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
bankList = $response->getBody();
// Submit your code to filter the bank you need and send its id in token request

Como respuesta a esta llamada, recibirás el nombre (name) y el código (code) de los bancos disponibles. Este último debe ser enviado en la solicitud del token de transfer out.

2. Tokeniza la información

Una vez obtenido el código del banco al que está relacionada la cuenta bancaria para realizar la transferencia, deberás realizar la petición del token utilizando nuestro endpoint de solicitud de token de transferencia.

  • Javascript
  • Python
  • PHP
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api-uat.kushkipagos.com/payouts/transfer/v1/tokens', // Test environment
'headers': {
'Public-Merchant-Id': '', // Replace with you Public Key
'Content-Type': 'application/json'
},
body: JSON.stringify({
"name":"John Doe"
"documentNumber":"19885521",
"accountNumber":"06",
"accountType":"CA",
"bankId":"002",
"totalAmount":30,
"documentType":"RUC",
"currency":"PEN",
"paymentDescription": "A short description of the payment"
"mail": "user@example.com"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
// Submit your code to send the token you received to the next request
});
import requests
url = "https://api-uat.kushkipagos.com/payouts/transfer/v1/tokens"
payload = {
"documentNumber": "70274647",
"accountNumber": "00230513322677808816",
"accountType": "CA",
"bankId": "002",
"totalAmount": 30,
"documentType": "DNI",
"currency": "PEN",
"paymentDescription": "A short description of the payment",
"name": "Prueba Peru",
"mail": "user@example.com"
}
headers = {
"Public-Merchant-Id": "",
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-uat.kushkipagos.com/payouts/transfer/v1/tokens",
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([
'documentNumber' => '70274647',
'accountNumber' => '00230513322677808816',
'accountType' => 'CA',
'bankId' => '002',
'totalAmount' => 30,
'documentType' => 'DNI',
'currency' => 'PEN',
'paymentDescription' => 'A short description of the payment',
'name' => 'Prueba Peru',
'mail' => 'user@example.com'
]),
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"Public-Merchant-Id: "
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}

3. Inicializa la transacción

En esta etapa, debes recibir el token obtenido e iniciar el proceso de dispersión con Kushki. Por lo tanto, necesitarás realizar una llamada a nuestro endpoint de inicialización para procesar el pago.

  • Javascript
  • Python
  • PHP
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api-uat.kushkipagos.com/payouts/transfer/v1/init', // Test environment
'headers': {
'Private-Merchant-Id': '', // Replace with your Private Key
'Content-Type': 'application/json'
},
body: JSON.stringify({
"amount":{
"subtotalIva":0,
"subtotalIva0":30,
"iva":0
},
"token":"53de1cb6bbb54011a0a98053d48677e0" // Replace with the token you received
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
url = "https://api-uat.kushkipagos.com/payouts/transfer/v1/init" // Test environment
payload = "{\n \"amount\": {\n \"subtotalIva\": 0,\n \"subtotalIva0\": 30,\n \"iva\": 0\n },\n \"token\": \"53de1cb6bbb54011a0a98053d48677e0\"\n}" // Replace with the token you received
headers = {
'Private-Merchant-Id': '', // Replace with your Private Key
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://api-uat.kushkipagos.com/payouts/transfer/v1/init'); // Test environment
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"amount": {
"subtotalIva": 0,
"subtotalIva0": 30,
"iva": 0
},
"token": "53de1cb6bbb54011a0a98053d48677e0" // Replace with the token you received
}');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Private-Merchant-Id' => '', // Replace with your Private Key
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();

La respuesta proporciona, un número de ticket e indica el estado de la transacción.

4. Consulta el estado de la transacción (opcional)

Ahora que la transferencia está próxima a procesarse, puedes conocer el estado de la transacción utilizando webhooks o consultando manualmente utilizando nuestra API.

Webhook

El estado de la transacción se notifica automáticamente una vez el dinero ha sido liquidado.

API

Puedes utilizar en nuestra API, el endpoint Get Status para consultar manualmente el estado de una transacción específica.

5. Prueba tu integración

Existen números de identificación de prueba que puedes utilizar en el ambiente UAT para asegurarte de que tu integración está lista.

Número de cuenta: 00316301312597216937 Número de identificación: 70015100 Tipo de identificación: DNI Tipo de cuenta: CA Número de identificación del banco: 003

Número de cuenta: 00219317615915503717 Número de identificación: 70015100 Tipo de identificación: DNI Tipo de cuenta: CA Número de identificación del banco: 002

6. Prepara tu certificación

Toma en consideración las siguientes pautas para aprobar la certificación técnica (requerida para obtener credenciales productivas):

  • Mostrar mensajes en pantalla de acuerdo con las respuestas de Kushki.
  • Guardar y registrar todas las respuestas de Kushki (requeridas en caso de necesitar soporte).
  • Si se reciben notificaciones por webhook correctamente, responder a la solicitud con un status 200.
  • Asegurarse que en el cuerpo de la petición se envíen todos los campos requeridos en la referencia API.

Acepta webhooks

Maneja eventos pospago de la manera correcta.