Dispersar pagos con Bre-B consiste en entregar dinero en tiempo real a las cuentas de tus usuarios usando únicamente una llave de pago del destinatario — sin necesidad de conocer su número de cuenta bancaria. Si ya cuentas con la llave de tus destinatarios (su cédula, celular, correo, alias o código de comercio), puedes usar tu cuenta de dispersión de Kushki para depositar directamente usando la lógica que prefieras.
Producto en versión beta 🔐👨Estamos trabajando en nuestra versión beta. ¡Manténte atento a su lanzamiento oficial! También puedes contactar a tu gerente de cuenta para más información.
Ideal para:
Pago a proveedores o vendedores
Marketplaces
Aplicaciones de delivery
Plataformas gig economy
Reembolsos y compensaciones
Importante
Ten en cuenta que Bre-B está disponible exclusivamente para Colombia con el procesador Bre-B configurado en tu MID. Debido a nuestras políticas de riesgo, los medios de pago disponibles y el tipo de integración pueden variar al momento en que formalices la afiliación. Te indicaremos cómo proceder en caso de que este proceso aplique para tu comercio.
El proceso de dispersión con Bre-B en Colombia se realiza siguiendo el flujo: Comercio → Kushki → Banco de la República (SPBVI) → Banco Receptor → Beneficiario.
Parámetro
Detalle
Monto mínimo por transacción
1 COP
Monto máximo por transacción
Equivalente a 1.000 UVT (Unidades de Valor Tributario, actualizado anualmente por la DIAN). Cada entidad financiera o usuario puede establecer límites inferiores diarios o por transacción.
Moneda
COP
Bancos disponibles
Todos los bancos colombianos (reglamentación del Banco de la República)
Horario de procesamiento API
24/7
Tiempo de acreditamiento
Tiempo real (máximo 30 segundos desde el inicio)
Tipo de respuesta
Asíncrona — el resultado final llega por webhook o por consulta al endpoint Get Status
Nota importante: La API de Kushki recibe y procesa las peticiones 24/7. A diferencia de ACH, Bre-B no utiliza ciclos bancarios — el procesamiento es en tiempo real a través del SPBVI del Banco de la República. No es necesario consultar el listado de bancos antes de tokenizar.
El primer paso es obtener un token enviando la llave del destinatario a Kushki. A diferencia de ACH, no necesitas consultar el listado de bancos antes de este paso — todos los bancos colombianos soportan transferencias a llaves por reglamentación del Banco de la República.Deberás realizar la petición del token utilizando nuestro endpoint de tokenización.
El formato del accountNumber se valida antes de enviar cualquier solicitud a la red de pagos (fail-fast). Un formato inválido retorna HTTP 400 de inmediato, sin llegar a consultar la red.
accountType
Formato requerido en accountNumber
KI
Alfanumérico en mayúsculas. Mínimo 1 carácter. Sin espacios ni caracteres especiales.
KP
Exactamente 10 dígitos. Debe iniciar con 3, seguido de 9 dígitos.
KE
Email válido. Máximo 30 caracteres antes de @ y 61 después. Debe incluir dominio válido.
KA
Debe iniciar con @. Solo caracteres alfanuméricos en mayúsculas. Sin espacios ni caracteres especiales.
KM
Exactamente 10 dígitos. Debe iniciar con 00, seguido de 8 dígitos.
JavaScript
Python
PHP
La respuesta incluye el token y el objeto keyResolution con los datos del destinatario resueltos por la red de pagos:
Ya que has obtenido el token y el objeto keyResolution, debes mostrar al operador o usuario final la información del destinatario para confirmar que los datos son correctos antes de inicializar la transacción. Este paso es requerido por el Banco de la República.Muestra al operador o usuario:
El valor de la llave: keyResolution.keyValue
El nombre del titular: keyResolution.ownerName (enmascarado, ej: M**** G**** L****)
Ten en cuenta que es posible que no conozcas el nombre del titular de una llave (por ejemplo, si solo tienes el número de cédula). La red de pagos resuelve el nombre asociado a esa llave para que el usuario confirme la identidad del destinatario. Solo procede al siguiente paso después de recibir la confirmación.
Una vez confirmados los datos del destinatario, debes enviar el token obtenido e iniciar el proceso de dispersión con Kushki. Deberás realizar una llamada a nuestro endpoint de inicialización para iniciar el pago. Este paso descuenta el saldo inmediatamente de tu cuenta de dispersión.
Verifica tu saldo antes de inicializar
Comprueba los fondos de tu comercio en Kushki antes de iniciar. Puedes verificar tu saldo en la Consola o usando el endpoint Balance for Payouts.
Ten en cuenta que el campo webhooks en el body del Init debe enviarse como un array. Envuelve tu objeto de configuración entre corchetes [ ].
JavaScript
Python
PHP
Revisa nuestra Referencia de la API para mayor información sobre los campos disponibles en la respuesta, incluyendo fullResponse V2 donde el objeto keyResolution se incluye dentro de details.
La respuesta entrega un número de ticket y el estado de la transacción:
Ahora que la dispersión está en proceso, puedes conocer el estado de la transacción utilizando webhooks o consultando manualmente utilizando nuestra API.
El estado de la transacción se notifica automáticamente en el momento en que la transferencia es aprobada o declinada. El payload incluye el objeto keyResolution con keyValue y ownerName.
Para configurar un webhook a tu comercio de prueba, es necesario que lo notifiques a nuestros agentes especificando la URL y el método de pago, mediante correo electrónico. Cuando recibas la notificación, responde siempre con HTTP 200.
Puedes utilizar nuestro endpoint Get Status para consultar manualmente el estado de una transacción específica.
JavaScript
Python
PHP
Para transacciones Bre-B, los campos bankId, documentNumber y documentType retornan vacíos o nulos en la respuesta. La información del destinatario estará disponible únicamente en el objeto keyResolution.
El ambiente UAT de Bre-B opera sobre un sandbox de la red de pagos. Las respuestas son simuladas y replican el comportamiento productivo, pero no generan movimientos reales de dinero ni operaciones en la red.
Los valores de prueba a continuación son exclusivos del ambiente UAT (api-uat.kushkipagos.com). No los uses en producción.
Usa estos valores para obtener un token con keyResolution resuelto. Todos retornan una transacción aprobada.
accountType
accountNumber de prueba
keyResolution.ownerName simulado
KP
3001234567
JUAN PEREZ
KE
USUARIO@CORREO.COM
MARIA LOPEZ
KA
@COLOMBIA
ANA MARTINEZ
KM
0012345678
COMERCIO PRINCIPAL SAS
KI
CC12345678
LUIS GOMEZ
ownerName en UAT
En el sandbox, keyResolution.ownerName se retorna sin enmascarar para facilitar la verificación durante el desarrollo. En producción, el nombre siempre llega enmascarado (ej: J*** P****).
Para simular respuestas de error en el procesamiento de pago, envía el valor exacto indicado en el campo totalAmount del request de tokenización. Si el monto no coincide con ningún valor de la tabla, la transacción resultará aprobada.
Solo son simulaciones
Estos montos no tienen ningún significado económico. Son únicamente identificadores de escenario dentro del sandbox. No los uses en producción.
Errores síncronos — llegan directamente en la respuesta del endpoint /init, sin necesidad de esperar el webhook:
totalAmount
responseCode Kushki
Descripción
4001
002
Ha ocurrido un error inesperado
4002
068
Monto Inválido
5001
073
Transacción no permitida
5003
074
Banco o cuenta no inscrita
Errores asíncronos — llegan a través del webhook o al consultar Get Status, después de que el /init retorna INITIALIZED:
totalAmount
responseCode Kushki
Descripción
6001
076
Error al efectuar el pago
4016
045
Fondos insuficientes
4017
077
Pendiente respuesta de otros bancos
4019
077
Pendiente respuesta de otros bancos
4020
041
Ocurrió un error en el sistema. Por favor, vuelve a intentarlo