1. Métodos alternativos de pago (APM)
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. Métodos alternativos de pago (APM)

Acepta pagos con Bre-B

🚧 Early Release — Beta
Este producto está en acceso temprano. Los parámetros, estructuras de respuesta y comportamientos pueden cambiar sin previo aviso. No uses esta versión en producción sin coordinarlo previamente con el equipo de integraciones de Kushki.
Bre-B es uno de los procesadores de APM (métodos alternativos de pago) en Colombia: en lugar de pedir los datos bancarios del pagador y redirigirlo a su banco, Kushki genera un código QR que el usuario escanea desde su aplicación bancaria para autorizar el pago en tiempo real.
Qué procesadores tiene tu comercio lo responde la consulta de configuración (GET /transfer/v1/config) — el modelo completo está en ¿Cómo funcionan los pagos con APM?. Las integraciones existentes con PSE no cambian: siguen su guía de transferencias bancarias.
Importante
Disponible exclusivamente para Colombia con el procesador Bre-B configurado en tu MID. Para habilitarlo, contacta a tu ejecutivo de cuenta.

Así es la experiencia de pago de tu cliente#

Tu comercio muestra el código QR en el checkout, el cliente lo escanea desde la app de su banco, revisa el monto y confirma, y el pago se aprueba en tiempo real.
breb.png

Detalles de operación#

ParámetroDetalle
MonedaCOP
Tipo de integración100% API — el token se solicita desde tu backend. Kajita y Kushki.js aún no soportan este flujo.
Campo adicional requeridoEl objeto processor (name + flowType) en el cuerpo del token
Consulta de listado de bancosNo requerida para este flujo
Resultado del initCódigo QR (base64 PNG) para pago desde app bancaria
Vigencia del QR10 minutos. Pasado ese tiempo el QR se invalida y debe generarse un nuevo token e init.
Tiempo de procesamientoTiempo real
CancelaciónPATCH /transfer/v1/cancel/{token} — disponible mientras la transacción no tenga estado final. Retorna HTTP 204 No Content.
WebhookSin cambios respecto al flujo PSE
Códigos de errorVer la sección 7. Errores de la API de esta guía

1. Consulta tus procesadores#

Este paso es opcional si Bre-B es tu único procesador, pero recomendado siempre: será la regla a medida que se habiliten más procesadores y flujos. Antes de tokenizar, llama a Consulta la configuración de Transfer In (GET /transfer/v1/config) con tu credencial pública. La entrada de Bre-B llega con supportedFlows: copia su name y el type del flujo en el objeto processor del token.
{
  "processors": [
    { "name": "Pse Processor", "currency": "COP" },
    {
      "name": "Bre-B Credibanco Processor",
      "currency": "COP",
      "supportedFlows": [
        { "type": "QR", "name": "QR Code", "description": "QR code payment" }
      ]
    }
  ]
}

2. Crea el token#

Realiza la petición del token usando el mismo endpoint que el flujo PSE. Para activar el flujo Bre-B, incluye el objeto processor con las propiedades name y flowType, copiadas exactamente de la respuesta de la consulta de procesadores. No es necesario consultar el listado de bancos antes de este paso.
Campos requeridos
CampoTipoDescripción
amount.subtotalIva0numberMonto de la transacción (sin IVA)
amount.subtotalIvanumberMonto de la transacción (con IVA). Igual a subtotalIva0 si iva = 0
amount.ivanumberValor del IVA (0 si no aplica)
currencystringMoneda. Debe ser "COP"
processor.namestringNUEVO campo requerido. Debe ser "Bre-B Credibanco Processor", exactamente como lo devuelve la consulta de procesadores — sin alias cortos
processor.flowTypestringNUEVO campo requerido. Debe ser "QR". No tiene valor por defecto
El objeto processor no admite propiedades adicionales: cualquier otra propiedad produce 400.
Campos opcionales
callbackUrl · userType · documentType · documentNumber · paymentDescription · email
El campo bankId no aplica en este flujo.
Si envías userType, documentType o documentNumber, aplican las reglas condicionales para COP — consulta ¿Cómo funcionan los pagos con APM?.
JavaScript
Python
PHP

3. Genera el código QR#

Con el token obtenido, inicializa la transacción. Kushki retorna un código QR en formato base64 que debes mostrar al usuario para que lo escanee desde su aplicación bancaria.
JavaScript
Python
PHP
Ejemplo de respuesta — sin fullResponse
{
  "qr": "data:image/png;base64,iVBORw0KGgoAAAANS...",
  "transactionReference": "f2110170-8eec-4214-b2d0-38970d44f8e1"
}
Ejemplo de respuesta — con fullResponse: "v2"
{
  "qr": "data:image/png;base64,iVBORw0KGgoAAAANS...",
  "transactionReference": "f2110170-8eec-4214-b2d0-38970d44f8e1",
  "details": {
    "status": "initializedTransaction",
    "amount": { "currency": "COP", "iva": 0, "subtotalIva": 1000, "subtotalIva0": 1000 },
    "created": 1784125900901,
    "description": "-",
    "merchantId": "20000000106921087000",
    "merchantName": "Mi Comercio Colombia"
  }
}

Cómo renderizar el campo qr#

El campo qr contiene una cadena Data URI completa (data:image/png;base64,...). Para mostrarlo en web:
En apps nativas, decodifica el base64 y renderiza el bitmap con el componente de imagen de tu plataforma.

4. Muestra el QR al usuario y espera el pago#

El usuario escanea el QR desde su aplicación bancaria y autoriza el pago. Kushki notifica el resultado de forma asíncrona.
El QR expira en 10 minutos. Si el usuario no escanea en ese tiempo, deberás generar un nuevo token e init.
Para monitorear el resultado: configura un webhook (ver paso 6) o consulta Get Status manualmente.
Mientras el pago está pendiente, puedes cancelar la transacción (ver paso 5).

5. Cancela la transacción (opcional)#

Si el usuario no puede completar el pago o necesitas invalidar el QR activo, cancela la transacción antes de que alcance un estado final.
Cuándo usar la cancelación
Usa este endpoint cuando el usuario ingrese un monto incorrecto, decida no completar el pago, o necesites emitir un nuevo QR antes de que el QR original expire (vigencia de 10 minutos). Solo es posible si la transacción aún no tiene un estado final.
Endpoint
PATCH https://{api-url}/transfer/v1/cancel/{token}
Donde {token} es el token obtenido en el paso 2.
Referencia técnica
Para mayor detalle sobre el comportamiento de la cancelación, consulta el documento de mapeo interno:
Cancelación — Referencia técnica
Respuesta exitosa (HTTP 204 No Content)
La cancelación exitosa retorna HTTP 204 sin cuerpo en la respuesta.
Error — transacción con estado final (HTTP 400)
{
  "code": "T023",
  "message": "Transacción posee un estado final."
}

6. Consulta el estado de la transacción#

El estado final del pago llega de forma asíncrona. Puedes recibirlo de dos maneras:
Webhook: Kushki notifica automáticamente cuando el pago es aprobado o rechazado. Sin cambios respecto al flujo PSE.
Get Status: Consulta manualmente el estado usando el token en el path.
JavaScript
Python
PHP
Sin cambios en el webhook
La estructura del webhook es idéntica al flujo PSE existente.

7. Errores de la API#

Al operar con el flujo multiprocesador puedes recibir errores de la API en la consulta de procesadores, la tokenización o al iniciar la transacción. Los campos de la respuesta de error son code y message.
EndpointHTTPCódigo¿Cuándo ocurre?¿Qué debe hacer el comercio?
GET /transfer/v1/config500E002Error al consultar la configuración del comercio. Mensaje: «Ha ocurrido un error inesperado.»Reintenta; si persiste, contacta a soporte.
POST /transfer/v1/tokens400—El body no cumple el contrato: campo requerido ausente, valor fuera del enumerado (processor.name, processor.flowType) o propiedad no permitida dentro de processor.Corrige el body según la consulta de procesadores y el contrato del flujo elegido.
POST /transfer/v1/init422E046El token no es compatible con el procesador resuelto.Revisa la consulta de procesadores y regenera el token con el procesador correcto.
POST /transfer/v1/init404E049El comercio no tiene un procesador Bre-B configurado (sin llaves).Verifica la configuración del procesador con Kushki.
Todos401—Credencial pública inválida o ausente.Verifica el Public-Merchant-Id.
Los errores de las transferencias bancarias con PSE están en Códigos de error para transferencias.

8. Prueba tu integración#

El ambiente UAT simula escenarios mediante el valor de transaction_amount, que corresponde a la suma de todos los campos del objeto amount en la petición (subtotalIva0 + subtotalIva + iva). Por ejemplo, para activar el escenario 10000 envía subtotalIva0: 5000, subtotalIva: 5000, iva: 0. Si la suma no coincide con ningún valor de la tabla, la respuesta es exitosa sin webhook.
Solo son simulaciones
Estos montos son identificadores de escenario en el sandbox. No tienen significado económico. No los uses en producción.
transaction_amountHTTP statusEstadoWebhookNota
10000201SUCCESSDispara → PAIDHappy path con webhook
9999201SUCCESSNo disparaLa transacción queda inicializada
11000500ERRORNo disparaQR-CODE-0001
12000201SUCCESSDispara → rejectedTransacción rechazada
13000—TIMEOUTNo disparaSe deja la transacción inicializada. Reutiliza el DELAY_MS existente.
99999999400ERRORNo disparaQR-CODE-0059 — monto fuera de rango
Cualquier otro201SUCCESSNo disparaRespuesta exitosa genérica

9. Prepara tu certificación#

Toma en consideración las siguientes pautas para aprobar la certificación técnica:
Los cálculos de los montos son correctos (subtotalIva, subtotalIva0, iva).
El objeto processor se envía con name: "Bre-B Credibanco Processor" y flowType: "QR" en la petición del token.
El código QR se muestra correctamente al usuario desde el campo qr de la respuesta del init.
Se implementa el endpoint de cancelación para los flujos donde el usuario no completa el pago.
Se muestran mensajes en pantalla de acuerdo con las respuestas de Kushki.
Si se reciben notificaciones por webhook, se responde con HTTP 200.
El botón de pago se deshabilita después del primer clic para evitar doble envío.
Todas las respuestas de Kushki se guardan y registran (requeridas en caso de soporte).
El logo de Kushki es visible. Descárgalo en s3.amazonaws.com/kushki-cdn-production/docs/Logo+Kushki.zip
Se envían todos los campos requeridos según la referencia API.

Artículos relacionados#

Acepta pagos con transferencia
Recibe transferencias bancarias
Configura tus webhooks
Recibe notificaciones del estado de tus pagos.
Cancelación - Referencia técnica
Referencia técnica
Modificado en 2026-10-16 20:28:43
Anterior
¿Cómo funcionan los pagos con APM?
Siguiente
Dispersión de dinero
Built with