1. Transferencia bancaria
Kushki Docs
Español
  • Español
  • English
  • Inicio
  • Inicio rápido
    • Últimas novedades
    • Datos de prueba
    • Preguntas frecuentes
    • Paso a producción
    • Política de cambios importantes del API
    • Códigos de error
  • Glosario de pagos
    • Glosario de pagos
  • Pagos únicos con tarjeta (Online)
    • Network Tokens
    • Marcas de tarjeta soportadas
    • Funcionalidades por modelo de negocio
    • Pagos en un paso
      • Acepta un pago con tarjeta
      • Cargo directo (sin token)
      • ¿Cómo funcionan los pagos con tarjeta?
      • Acepta pagos únicos con OTP
      • Códigos de error autenticación OTP
      • Códigos de error pagos únicos con tarjeta
    • Pagos en dos pasos
      • Recibe pagos con autorización y captura
      • ¿Cómo funcionan los pagos únicos con autorización y captura?
    • Devoluciones
      • Devoluciones, anulaciones y reembolsos
    • Autenticación 3DS
      • Integración 3DS API + librería kushki.js
      • Introducción a 3DS
      • Integración 100% API de 3DS
      • Integración 3DS con librería kushki.js
      • Códigos de error autenticación 3DS
    • Pagos con Apple Pay
      • Configuración de Apple Pay
      • Pruebas en Sandbox Apple Pay
  • Pagos recurrentes con tarjeta (Online)
    • Autentica tus suscripciones con 3DS
    • Suscripciones externas a Kushki
    • Acepta pagos one click con 3DS
    • Funcionalidades por modelo de negocio
    • Códigos de error en cargos recurrentes
    • Pagos calendarizados
      • Maneja tus cargos calendarizados
      • Crea un cargo calendarizado
      • ¿Cómo funcionan los cargos recurrentes con tarjeta?
    • Pagos OneClick
      • Recibe pagos OneClick con autorización y captura
      • Genera pagos one click
      • ¿Cómo funcionan los pagos OneClick con autorización y captura?
  • Pagos con tarjeta presente
    • Acepta pagos con tarjeta presente
    • Datos de prueba
    • Webhooks para tarjeta presente
    • Raw card-present API
      • Introducción a Raw card-present API
      • Script de ejemplo para cifrar información
      • Acepta pagos
      • Intercambio de claves criptográficas
      • Preguntas frecuentes
      • Códigos de error para transacciones con tarjeta presente
    • Kushki One
      • Primeros Pasos
      • Autenticación y Cifrado de Requests
      • Realiza cobros con Kushki One
      • Formato de montos en Kushki ONE
      • Impresión en terminal SmartPOS
      • Catálogo Unificado de Errores — Kushki ONE Connect
      • Servicios asíncronos y webhooks
    • Kushki One App de Pagos
      • Descripción general
      • Devoluciones y PreAuth & Capture
      • Pago Dividido en la terminal
      • Configuración del terminal
      • Procesa un cobro
      • Consulta tus transacciones
    • Transacciones
      • Transacciones
      • Anula un pago
  • Pagos con transferencias
    • Recibe transferencias bancarias
    • Códigos de error para transferencias
    • Consulta el estado de una transacción
    • Bancos y detalles de operación para pagos con transferencia bancaria
  • Pagos en efectivo
    • Acepta un pago en efectivo
    • ¿Cómo funcionan los pagos en efectivo?
    • Puntos de recaudo
    • Códigos de error para transacciones declinadas en efectivo
  • Métodos alternativos de pago (APM)
    • ¿Cómo funcionan los pagos con APM?
    • Acepta pagos con Bre-B
  • Dispersión de dinero
    • Recarga tu saldo para dispersiones
    • Transferencia bancaria
      • Dispersa a cuentas bancarias
      • Dispersa con Bre-B
      • Códigos de error para dispersiones por transferencia
      • ¿Cómo funciona la dispersión por transferencia bancaria?
    • Efectivo
      • Dispersa dinero en efectivo
      • Maneja tus dispersiones
      • ¿Cómo funciona la dispersión por efectivo?
  • Plugins
    • Shopify
      • Shopify
      • Operación del Plugin
    • Vtex
      • Guía de integración VTEX
  • Links de pago
    • Smartlinks
  • Formularios y botones de pago
    • Introducción
    • Kajita
      • Kajitas de pago
      • ¿Cómo funciona?
    • Botón de pago
      • Genera un botón de pago
      • ¿Cómo funciona el botón de pago?
  • Administración de sucursales
    • ¿Cómo realizar el onboarding de subcomercios vía API?
  • Notificaciones
    • Buenas prácticas
    • Consulta tus webhooks
    • Webhooks para pagos únicos
      • Webhook para pagos únicos con tarjeta
      • Webhook para pagos únicos con transferencia bancaria
      • Webhook para pagos únicos con efectivo
    • Webhooks para pagos recurrentes
      • Webhook para pagos recurrentes con tarjeta
    • Webhooks para smartlinks
      • Webhooks con Smartlinks
    • Webhooks para dispersiones
      • Webhook para dispersión de dinero con transferencia
      • Webhook para dispersión de dinero con efectivo
    • Webhooks para botón de pagos
      • Webhooks con Botón de pago
    • Webhooks para devoluciones
      • Webhook para devoluciones
      • Webhook para contracargos
HomeMexico 🇲🇽Ecuador 🇪🇨Chile 🇨🇱Colombia 🇨🇴
Peru 🇵🇪
HomeMexico 🇲🇽Ecuador 🇪🇨Chile 🇨🇱Colombia 🇨🇴
Peru 🇵🇪
Status
Soporte / Support
Español
  • Español
  • English
  1. Transferencia bancaria

Dispersa con Bre-B

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.

Detalles de operación#

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ámetroDetalle
Monto mínimo por transacción1 COP
Monto máximo por transacciónEquivalente 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.
MonedaCOP
Bancos disponiblesTodos los bancos colombianos (reglamentación del Banco de la República)
Horario de procesamiento API24/7
Tiempo de acreditamientoTiempo real (máximo 30 segundos desde el inicio)
Tipo de respuestaAsí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.

Flujo#

El flujo que integrarás es el siguiente:
Flujo breb ES
Aquí aprenderás cómo integrar las dispersiones de dinero con Bre-B.

1. Tokeniza la información#

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.

Campos obligatorios para obtener el token#

Ten en cuenta los campos requeridos en el cuerpo de la petición de token para Bre-B:
Dispersión con llave Bre-B (accountType = KI, KP, KE, KA, KM)
- accountType
- accountNumber
- totalAmount
- currency
Los campos documentType, documentNumber, bankId y name son opcionales para Bre-B en Colombia.

Tipos de llave (accountType)#

accountTypeTipo de llave
KINúmero de identificación
KPNúmero de celular
KECorreo electrónico
KAAlias alfanumérico
KMCódigo de comercio

Formatos válidos para accountNumber#

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.
accountTypeFormato requerido en accountNumber
KIAlfanumérico en mayúsculas. Mínimo 1 carácter. Sin espacios ni caracteres especiales.
KPExactamente 10 dígitos. Debe iniciar con 3, seguido de 9 dígitos.
KEEmail válido. Máximo 30 caracteres antes de @ y 61 después. Debe incluir dominio válido.
KADebe iniciar con @. Solo caracteres alfanuméricos en mayúsculas. Sin espacios ni caracteres especiales.
KMExactamente 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:
{
  "token": "53de1cb6bbb54011a0a98053d48677e0",
  "keyResolution": {
    "keyValue": "3001234567",
    "ownerName": "M**** G**** L****"
  }
}
CampoDescripción
tokenToken de la transacción. Expira en 30 minutos. De un solo uso, independientemente del resultado.
keyResolution.keyValueValor exacto de la llave, sin transformaciones.
keyResolution.ownerNameNombre del titular, retornado enmascarado por la red de pagos (ej: M**** G**** L****).
Revisa nuestra Referencia de la API para consultar todos los campos disponibles en el request y response del token.

2. Confirma el destinatario#

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.

3. Inicializa la transacció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:
{
  "status": "INITIALIZED",
  "ticketNumber": "1234567890",
  "transactionReference": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

4. Consulta 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.

Webhook#

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.

API#

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.

5. Prueba tu integración#

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.

Resolución exitosa de llave#

Usa estos valores para obtener un token con keyResolution resuelto. Todos retornan una transacción aprobada.
accountTypeaccountNumber de pruebakeyResolution.ownerName simulado
KP3001234567JUAN PEREZ
KEUSUARIO@CORREO.COMMARIA LOPEZ
KA@COLOMBIAANA MARTINEZ
KM0012345678COMERCIO PRINCIPAL SAS
KICC12345678LUIS 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****).

Errores en tokenización (PT060)#

Usa estos valores para simular una llave inválida o suspendida durante el paso de tokenización. Retornan PT060 antes de que se inicie la transacción.
accountTypeaccountNumber de pruebaEscenario simulado
KEBLOCKED@TEST.COMLlave suspendida
KM0011111111Llave suspendida por el participante
KP3000005001Error en la resolución de la llave
KIERRDICE9994Error inesperado durante la resolución

Simulación de escenarios de pago por monto#

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:
totalAmountresponseCode KushkiDescripción
4001002Ha ocurrido un error inesperado
4002068Monto Inválido
5001073Transacción no permitida
5003074Banco 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:
totalAmountresponseCode KushkiDescripción
6001076Error al efectuar el pago
4016045Fondos insuficientes
4017077Pendiente respuesta de otros bancos
4019077Pendiente respuesta de otros bancos
4020041Ocurrió un error en el sistema. Por favor, vuelve a intentarlo
9999002Ha ocurrido un error inesperado
4006080Cuenta destino inválida
4007052Número de cuenta inválido
4010088Cuenta no existe
4011091Cuenta con bloqueo transaccional
4012071Valor de traslado inválido
4013071Valor de traslado inválido

6. Prepara tu certificación#

Toma en consideración las siguientes pautas para aprobar la certificación técnica (requerida para obtener credenciales productivas):
Los cálculos de los montos son correctos (subtotalIva, subtotalIva0, iva).
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).
Mostrar el objeto keyResolution al operador o usuario y requerir confirmación explícita antes de inicializar la transacción.
El procesador configurado en la Consola corresponde a Bre-B.
Si no se requiere enviar comprobante al correo del cliente, no se debe especificar el email en la solicitud del token.
Si se reciben notificaciones por webhook correctamente, responder a la solicitud con un status 200.
El botón de dispersión se deshabilita después del primer clic para evitar doble envío.
El logo de Kushki debe ser visible para el cliente. Puedes encontrar nuestro logo en varios formatos aquí.
Asegurarse de que en el cuerpo de la petición se envíen todos los campos requeridos en la referencia API.

Acepta webhooks
Maneja eventos post-dispersión de la manera correcta.
Códigos de error
Consulta los códigos de error para dispersiones con Bre-B.
Modificado en 2026-10-14 19:40:49
Anterior
Dispersa a cuentas bancarias
Siguiente
Códigos de error para dispersiones por transferencia
Built with