Documentación para desarrolladores

Bienvenido a
PaymentsWay

Selecciona el área de documentación que necesitas.

Merchant
APIs, plugins, web checkout, widget y toda la documentación para integrar pagos en tu plataforma.
PayOuts
Dispersión de fondos. Envía dinero a múltiples cuentas bancarias desde tu saldo en PaymentsWay.
Billeteras
Integración con billeteras digitales y pagos móviles del ecosistema colombiano.
Documentación para desarrolladores

Construye con
PaymentsWay

Todo lo que necesitas para integrar pagos en tu plataforma. APIs, plugins, web checkout, widget y guías paso a paso.

/
Primeros pasos
Registro, credenciales y configuración inicial para empezar a cobrar en minutos.
API REST
Referencia completa de endpoints, parámetros, ejemplos y respuestas de la API.
Plugins & CMS
Integra PaymentsWay con WooCommerce, PrestaShop, Magento o VTEX sin escribir código.
Soporte técnicoNuestro equipo responde en menos de 24h
Colección PostmanPrueba todos los endpoints sin escribir código
PayOuts — Dispersión de fondos

Envía dinero
de forma masiva

Dispersa fondos a múltiples cuentas bancarias desde tu saldo en PaymentsWay. Ideal para marketplaces, nóminas y pagos a proveedores.

Send funds to multiple bank accounts from your PaymentsWay balance — ideal for marketplaces, payroll, or vendor payments.

💸
Dispersión masiva
Paga a múltiples destinatarios en una sola orden.
🏦
Cualquier banco
Transfiere a cuentas de cualquier banco colombiano.
Tiempo real
Transferencias procesadas de forma inmediata.
📡
Webhook + Portal
Recibe confirmación vía webhook o consulta en el portal.

Flujo de un PayOut

El proceso tiene cuatro pasos: crear la orden, agregar movimientos, cerrar la orden y esperar la respuesta — por webhook o consultando el portal.

Flujo completo de un PayOut 01 Crear orden POST /orders Retorna order_id ★ 1 order_id 02 Agregar movimientos POST /orders/{id}/movements Cuenta · Monto · Nombre Repetir por destinatario N veces 03 Cerrar orden POST /orders/{id}/close Inicia el procesamiento 04 Procesar PayOut PaymentsWay dispersa a cada cuenta destino RESPUESTA — por dos canales simultáneos 📡 Webhook (automático) PaymentsWay hace POST a tu URL registrada con el resultado de cada movimiento. event: PAYOUT_SUCCESS | PAYOUT_FAILED 🖥 Portal PaymentsWay (manual) Consulta el estado de cada movimiento desde la consola de PaymentsWay. GET /orders/{id} → status por movimiento 📋 Estado de cada movimiento (exitoso o fallido) Se reporta el resultado de cada movimiento independientemente de si fue aprobado o rechazado

Documentación de la API

La referencia completa está disponible en Postman en español e inglés:

🇨🇴
Español
Colección Postman completa con todos los endpoints de PayOuts en español.
Abrir documentación
🇺🇸
English
Full Postman collection with all PayOuts endpoints documented in English.
Open documentation
⚠ Activación requerida / Activation required
El servicio de PayOuts requiere activación previa por parte del equipo de PaymentsWay.
PayOuts requires prior activation by the PaymentsWay team.

📧 soporte@paymentsway.co  ·  🌐 www.paymentsway.co
🔜

Billeteras

Estamos trabajando en la integración con billeteras digitales y pagos móviles. Muy pronto estará disponible.

🚧  Próximamente
Merchant

Bienvenido a Merchant

PaymentsWay Merchant es la plataforma completa para integrar cobros en tu negocio. Desde aquí puedes configurar tus métodos de pago, conectar tu tienda online y gestionar todas tus transacciones desde un solo lugar.

¿Qué puedes hacer en Merchant?

📋
Registro y credenciales
Crea tu cuenta, obtén tus credenciales (Merchant ID, Terminal ID, API Key) y configura tu entorno.
🔗
Web Checkout
Genera links de pago, botones HTML y formularios para cobrar desde cualquier canal digital.
🧩
Widget embebido
Integra el checkout directamente en tu sitio web sin redirecciones con 3 líneas de código.
🎨
Cartas de pago
Formularios embebibles con el branding de tu marca para páginas de donación o suscripción.
🔌
Plugins & CMS
Conéctate a WooCommerce, PrestaShop, Magento o VTEX sin escribir código.
API REST
Integración completa por API: links de pago, PSE, efectivo, tarjeta, webhooks y más.
📡
WebHooks
Recibe notificaciones en tiempo real sobre el resultado de cada transacción en tu servidor.
📱
BReB / QR
Pagos por código QR y transferencias BReB para el ecosistema bancario colombiano.

¿Por dónde empezar?

  1. Regístrate y obtén tus credenciales de acceso — ver Registro.
  2. Elige tu método de integración: plugin, widget, botón HTML o API REST — ver Modos de integración.
  3. Configura los métodos de pago que quieres ofrecer: tarjeta, PSE, efectivo o QR.
  4. Activa tu webhook para recibir confirmaciones en tiempo real — ver WebHook.
  5. Realiza una prueba de extremo a extremo con un monto mínimo antes de salir a producción.

¿Necesitas ayuda? Escribe a soporte@paymentsway.co — nuestro equipo responde en menos de 24 horas.

Introducción

Registro

Para usar PaymentsWay necesitas registrarte y obtener tus credenciales. El proceso toma entre 5 y 10 minutos dependiendo del tipo de cuenta.

Acceso a la consola

Una vez aprobado tu registro, accedes a la consola con las credenciales enviadas a tu correo:

Crear cuenta gratis →

Tipo de registro

Selecciona el perfil que se ajusta a tu situación:

Introducción

Modos de Integración

PaymentsWay ofrece tres modalidades de integración. Elige la que mejor se adapte a tu stack tecnológico y nivel de personalización requerido.

Widget de pagos

La integración más rápida. Con pocas líneas de código embeds el checkout directamente en tu página — el cliente paga sin salir de tu sitio.

Web Checkout

Un formulario HTML estándar que redirige al cliente al checkout seguro de PaymentsWay. Ideal si no quieres gestionar el flujo de pago en tu servidor.

Plugins para CMS

Si usas WooCommerce, PrestaShop o Magento, instala el plugin y configura tus credenciales. Sin código.

🧩
Widget
Embebido directo en tu página
🌐
Web Checkout
Formulario HTML con redirección
🔌
Plugins CMS
WooCommerce, PrestaShop, Magento
Consola

Botones de pago

Los botones de pago son la unidad central de configuración en PaymentsWay. Cada botón define el tipo de cobro, los métodos habilitados y el entorno (test o producción).

Crear un botón

  1. Ingresa a la consola con tu usuario y contraseña.
  2. Navega al módulo Botones de pago.
  3. Haz clic en Crear botón de pago y completa el formulario.

Tipos disponibles

💳
Monto fijo
El comercio define el precio.
🎛
Monto abierto
El cliente elige cuánto pagar.
Web Checkout

Links de pago

Un link de pago es una URL que puedes generar desde la consola de PaymentsWay o vía API y compartir por cualquier canal digital. El cliente hace clic, ingresa sus datos de pago y listo — sin que tengas que instalar nada en tu sitio web.

🔗
Cero instalación
Solo genera el link y compártelo. No necesitas sitio web.
📱
Cualquier canal
WhatsApp, email, SMS, redes sociales o código QR.
📋
Masivo o individual
Un link por cliente o carga masiva desde Excel.
🎛
Monto fijo o abierto
Tú defines el precio o el cliente lo elige.

¿Cómo funciona?

1. Genera el link Consola PaymentsWay o vía API 2. Comparte WhatsApp · Email SMS · Redes 3. Cliente paga Abre el link y completa el pago con su método 4. Confirmación Webhook notifica a tu sistema ✅ Cobro recibido

Links masivos

Genera links para múltiples clientes a la vez cargando una plantilla de Excel. Ideal para facturación por lotes, cobros de cuotas o pagos periódicos a muchos clientes al mismo tiempo.

Link individual

Crea un link para un cliente específico con sus datos prellenados o genérico sin datos. Sobre cada link generado tienes tres acciones disponibles:

  • Ver — Abre el checkout en el navegador para previsualizar.
  • Copiar — Copia el link recortado al portapapeles.
  • Compartir — Envía el link por SMS directamente al número del cliente.

Link con monto dinámico

En Links de pago express activa la opción "¿Va a ser un monto fijo? → No" para que sea el cliente quien seleccione o ingrese el monto antes de pagar. Útil para donaciones, propinas o cobros variables.

Para generar links vía API consulta los endpoints Crear link con redirección y Crear link de pago.

Web Checkout

Botón de Pago

El botón de pago es un formulario HTML que envías desde tu servidor hacia el checkout de PaymentsWay con los datos de la compra ya precargados. El cliente llega al checkout listo para pagar — tú controlas los datos, PaymentsWay gestiona el cobro.

Sin backend complejo
Solo un formulario HTML POST. Funciona con cualquier tecnología.
🔒
Datos precargados
Nombre, email, monto y referencia llegan listos al checkout.
🔄
URL de retorno
Al finalizar el pago el cliente regresa a tu página.
🛡
Checksum opcional
Firma SHA-256 para validar la integridad de los datos.

¿Cómo funciona?

1. Tu página web Cliente hace clic en "Pagar" 2. POST al checkout Formulario HTML con datos precargados 3. Portal PaymentsWay Cliente ingresa datos de su tarjeta 4. Retorno Redirige a tu response_url Listo

Código base

HTML
<form method="Post" action="https://merchant.paymentsway.co/cartaspago/redirect">
  <input name="merchant_id"      type="hidden" value="0">
  <input name="form_id"          type="hidden" value="0">
  <input name="terminal_id"      type="hidden" value="0">
  <input name="order_number"     type="hidden" value="0">
  <input name="amount"           type="hidden" value="0">
  <input name="currency"         type="hidden" value="COP">
  <input name="order_description" type="hidden" value="Test de compra">
  <input name="client_email"     type="hidden" value="user@example.com">
  <input name="client_phone"     type="hidden" value="3000000000">
  <input name="client_firstname" type="hidden" value="Juan">
  <input name="client_lastname"  type="hidden" value="Pérez">
  <input name="client_doctype"  type="hidden" value="4">
  <input name="client_numdoc"   type="hidden" value="1234567890">
  <input name="response_url"    type="hidden" value="https://tu-sitio.com/respuesta">
  <input name="Submit"          type="submit"  value="Pagar">
</form>

Parámetros

CampoTipoDescripciónReq.
merchant_idnumberID del comercio. Encuéntralo en Mis Credenciales.
form_idnumberID del botón de pago.
terminal_idnumberID de la terminal.
order_numberstringReferencia única de la venta.
amountnumberMonto total en la moneda indicada.
currencystringCOP, USD o EUR.
order_descriptionstringDescripción de la venta.
client_emailstringCorreo electrónico del cliente.
client_phonestringNúmero de celular del cliente.
client_firstnamestringNombre del cliente.
client_lastnamestringApellidos del cliente.
client_doctypenumberTipo de documento: 1 Pasaporte · 4 CC · 5 CE · 6 NIT.
client_numdocstringNúmero de documento.
response_urlstringURL a la que redirige tras el pago.No
checksumstringFirma SHA-256 de seguridad.No
additional_datastringDatos adicionales que se retornan en el webhook.No
Web Checkout

Botón de Pago Abierto

El botón de pago abierto es una variación del botón estándar donde el cliente elige cuánto pagar. Tú defines un rango de montos y él decide. Ideal para donaciones, recargas, propinas o cualquier cobro donde el precio no es fijo.

🎛
El cliente elige
Selecciona de opciones preestablecidas o ingresa un monto libre.
⚖️
Rango controlado
Defines mínimo y máximo — el cliente no puede salirse del rango.
🇨🇴
Solo COP
Disponible únicamente en pesos colombianos.
📋
Hasta 4 opciones
Configura hasta 4 montos sugeridos para facilitar la selección.

¿Cómo funciona?

1. Formulario POST type_method=2 con rangos de monto 2. Cliente elige monto Selecciona opción o ingresa valor libre 3. Paga Ingresa datos de tarjeta o PSE 4. Confirmación Retorna a la tienda + webhook

Solo disponible en COP. El campo type_method debe ser siempre 2.

Código base

HTML
<form method="post" action="https://merchant.paymentsway.co/cartaspago/redirect">
  <input name="type_method" type="hidden" value="2">
  <input name="currency"    type="hidden" value="COP">
  <input name="amount_1"    type="hidden" value="10000">
  <input name="amount_2"    type="hidden" value="20000">
  <input name="amount_3"    type="hidden" value="30000">
  <input name="amount_4"    type="hidden" value="40000">
  <input name="min_amount"  type="hidden" value="10000">
  <input name="max_amount"  type="hidden" value="40000">
  <input name="Submit"      type="submit"  value="Pagar">
</form>
Widget

Implementación del Widget

El widget de PaymentsWay es un checkout embebido que se abre directamente dentro de tu página — el cliente paga sin salir de tu sitio. A diferencia del botón de pago, no hay redirecciones: el formulario aparece sobre tu propio sitio como una capa flotante.

🧩
Sin redirección
El cliente paga sin salir de tu sitio. Mejor experiencia de compra.
3 líneas de código
CSS + JS + inicialización. Compatible con cualquier framework.
🔄
Monto actualizable
Puedes cambiar el monto dinámicamente antes de abrir el widget.
💳
Pagos recurrentes
Soporta suscripciones con intervalo configurable.

Widget vs Botón de Pago

CaracterísticaWidgetBotón de Pago
RedirecciónNo — se abre en tu páginaSí — va al portal PW
InstalaciónCSS + JS + 3 líneasSolo un formulario HTML
ExperienciaCheckout flotantePágina completa
Pagos recurrentes✓ Soportado✗ No disponible
Monto dinámicoupdateAmount()✗ Fijo en el form

El orden de carga importa: primero el CSS, luego el JS, finalmente el script de inicialización.

1 — Hoja de estilos

HTML
<link rel="stylesheet"
      href="https://merchant.paymentsway.co/assetsWidget/css/index.css" />

2 — Script (final del body)

HTML
<script src="https://merchant.paymentsway.co/assetsWidget/js/index.js"></script>

3 — Inicializar

JavaScript
const checkout = new widgetCheckout({
  merchant_id      : 'tu-merchant-id',
  form_id          : 'tu-form-id',
  terminal_id      : 'tu-terminal-id',
  order_number     : generateOrderNumber(7),
  amount           : '50000',
  currency         : 'COP',
  order_description: 'Compra en mi tienda',
  apikey           : 'tu-api-key',
  ip               : '0.0.0.0',
});

// Actualizar monto dinámicamente
checkout.updateAmount(75000);

Parámetros

CampoTipoDescripciónReq.
merchant_idstringID del comercio desde la consola.
form_idstringID del botón de pago.
order_numberstringIdentificador único de la orden.
amountstringMonto a cobrar.
currencystringCOP, USD o EUR.
apikeystringAPI Key de la consola.
redirectstringURL de retorno al finalizar.No
additionalDataobjectDatos extra que retorna el webhook.No
Widget

Modo de Uso

Esta sección describe la experiencia que vive el cliente al usar el widget — desde que hace clic en "Pagar" hasta que recibe la confirmación, sin salir de tu sitio web en ningún momento.

1️⃣
Clic en Pagar
El widget aparece como una capa flotante sobre tu página.
2️⃣
Elige método
Tarjeta de crédito, PSE o efectivo — según lo que hayas habilitado.
3️⃣
Completa datos
Ingresa los datos de pago en el formulario del widget.
4️⃣
Confirmación
Mensaje de éxito en pantalla + webhook a tu servidor.

Flujo de pago

  1. El cliente hace clic en el botón de pago generado por el widget.
  2. Selecciona el método: Tarjeta, PSE o Efectivo.
  3. Completa sus datos y confirma el pago.
  4. Recibe confirmación en pantalla y tu servidor recibe el webhook.

El widget soporta pagos recurrentes. El cliente elige el intervalo: Mensual, Trimestral, Semestral o Anual.

Cartas de pago

Cartas de Pago

Las cartas de pago son formularios de cobro embebibles con el branding de tu marca. Se insertan en cualquier página web como un iframe — el cliente paga sin salir de tu sitio y sin ver ninguna pantalla de PaymentsWay. Ideal para páginas de donación, suscripciones o cobros recurrentes con imagen propia.

🎨
Branding propio
El formulario se adapta a los colores y diseño de tu marca.
🔗
Embebible
Se inserta como un iframe con una línea de HTML.
🔒
URL autorizada
Solo las URLs registradas pueden mostrar una carta de pago.
📋
Link directo
También puedes compartir la carta como un link independiente.

¿Cuándo usar cartas vs widget?

CaracterísticaCarta de PagoWidget
Branding propio✓ Total✗ Estilo PaymentsWay
InstalaciónUn <embed> o linkCSS + JS + init
URL autorizada requerida✓ Sí✓ Sí
Monto dinámico por código✗ NoupdateAmount()
Uso típicoDonaciones, landing pagesE-commerce, carrito

Solo las URLs autorizadas pueden insertar cartas de pago. Para habilitar tu dominio: tecnologia@paymentsway.co

Crear una carta

  1. Crea una terminal y ve al módulo Botones de pago.
  2. Selecciona Crear Botón de pago.
  3. Elige el tipo Carta de pago y completa el formulario.

Insertar la carta

Una vez creada, desde el listado haz clic en la carta para abrir el modal. Dispondrás de dos opciones:

  • Copiar embebido — Código HTML listo para pegar en tu sitio.
  • Copiar URL — Link directo a la carta de pago.
Plugins

WooCommerce

WooCommerce es el plugin de comercio electrónico más usado del mundo, construido sobre WordPress. Con el plugin nativo de PaymentsWay puedes aceptar pagos con tarjeta y PSE en tu tienda en minutos — sin escribir una sola línea de código.

Instalación rápida
Sube el .zip desde el panel de WordPress y listo.
💳
Tarjeta + PSE
Visa, Mastercard y PSE activados con un plugin.
🌍
Multi-moneda
COP, USD y EUR soportados.
🔄
Redirect seguro
El cliente paga en el portal de PaymentsWay y regresa a la tienda.

Flujo de instalación

1. Descargar plugin plugin-payments.zip desde PaymentsWay 2. Instalar en WP Plugins → Añadir nuevo → Subir .zip 3. Activar y configurar WooCommerce → Ajustes → Pagos → PaymentsWay 4. Ingresar credenciales Merchant · Terminal Form ID · API Key ✅ Listo tienda activa

Requisitos previos

Ten a mano las credenciales entregadas por PaymentsWay antes de empezar:

DatoDónde encontrarlo
Merchant IDPanel PaymentsWay → Mis Credenciales
Terminal IDPanel PaymentsWay → Mis Credenciales
Form ID (ID Botón de Pago)Panel PaymentsWay → Botones de Pago
API KeySolicitar a soporte@paymentsway.co
URL de retornoLa URL de la página de tu tienda (ej: https://mitienda.com/tienda)

Instalación paso a paso

⬇ Descargar Plugin

Monedas soportadas: COP, USD, EUR. Asegúrate de configurar la misma moneda en WooCommerce.

  1. Ve a WordPress → Plugins → Añadir nuevo → Subir plugin, selecciona el archivo plugin-payments.zip y haz clic en Instalar ahora.
  2. Una vez instalado haz clic en Activar plugin.
  3. Ve a WooCommerce → Ajustes → Pagos y activa el interruptor de PaymentsWay.
  4. Haz clic en Configurar e ingresa los datos de tu cuenta: ID MERCHANT, ID TERMINAL, ID BOTÓN DE PAGO y APIKEY.
  5. En el campo URL de retorno pega la URL de la página principal de tu tienda.
  6. Haz clic en Guardar cambios.

Realiza una compra de prueba para confirmar que el checkout redirige al portal de PaymentsWay y regresa correctamente a tu tienda.

Plugins

PrestaShop

PrestaShop es una plataforma de comercio electrónico de código abierto ampliamente usada en Colombia y Latinoamérica. El módulo nativo de PaymentsWay se instala directamente desde el panel de administración — sin modificar código ni plantillas.

📦
Módulo nativo
Instalación desde el administrador de módulos de PrestaShop.
💳
Tarjeta + PSE
Métodos de pago colombianos listos en minutos.
🎛
Restricciones flexibles
Configura por moneda, grupos de clientes y países.
🔄
Sin desarrollo
Configuración 100% visual desde el panel.

Flujo de instalación

1. Descargar módulo pwmerchant.zip desde PaymentsWay 2. Subir módulo Módulos → Administrador → Subir un módulo 3. Configurar Localizar PaymentsWay → Configurar → Credenciales 4. Preferencias Pagos → Preferencias moneda · grupos · países ✅ Listo tienda activa

Requisitos previos

Credenciales necesarias, entregadas por el equipo de PaymentsWay:

DatoDónde encontrarlo
merchant_idPanel PaymentsWay → Mis Credenciales
terminal_idPanel PaymentsWay → Mis Credenciales
form_idPanel PaymentsWay → Botones de Pago
apikeySolicitar a soporte@paymentsway.co

Paso 1 — Instalación

⬇ Descargar Módulo
  1. Ve a Módulos → Administrador de Módulos → Subir un módulo.
  2. Selecciona el archivo pwmerchant.zip y espera que la instalación se complete.

Paso 2 — Configuración

  1. En el listado de módulos localiza PaymentsWay y haz clic en Configurar.
  2. Ingresa tus credenciales: merchant_id, terminal_id, form_id, apikey.
  3. Guarda los cambios.

Paso 3 — Preferencias de pago

  1. Ve a Pagos → Preferencias.
  2. Configura restricciones por moneda (COP, USD, EUR), grupos de clientes y países según tu operación.
  3. Guarda los cambios.

Realiza una compra de prueba para confirmar que el checkout funciona correctamente con PaymentsWay.

Plugins

Magento

Magento (Adobe Commerce) es la plataforma de comercio electrónico empresarial preferida por negocios de mediano y gran tamaño. La extensión de PaymentsWay para Magento 2 se instala vía cPanel sin necesidad de Composer ni acceso por SSH.

🏢
Enterprise ready
Compatible con Magento 2 y Adobe Commerce.
📁
Instalación vía cPanel
Sin Composer ni acceso SSH requerido.
💳
Tarjeta + PSE
Todos los métodos de pago colombianos.
🔄
Redirect seguro
Pago en portal PaymentsWay con retorno automático.

Flujo de instalación

1. Descargar extensión plugin-magento- paymentsway.zip 2. Subir vía cPanel Adm. archivos → app/ Subir y descomprimir .zip 3. Configurar en Magento Stores → Configuration → Sales → PaymentsWay 4. Guardar y limpiar Guardar configuración Limpiar caché ✅ Listo tienda activa

Requisitos previos

Credenciales necesarias, entregadas por el equipo de PaymentsWay:

DatoDónde encontrarlo
Merchant IDPanel PaymentsWay → Mis Credenciales
Terminal IDPanel PaymentsWay → Mis Credenciales
Form IDPanel PaymentsWay → Botones de Pago
API KeySolicitar a soporte@paymentsway.co
Response URLLa URL de tu tienda donde Magento procesa la respuesta del pago

Paso 1 — Instalación vía cPanel

⬇ Descargar Extensión
  1. Accede a tu cPanel y abre el Administrador de archivos.
  2. Navega a la carpeta raíz de tu instalación de Magento y luego abre la carpeta app/.
  3. Sube el archivo plugin-magento-paymentsway.zip y descomprímelo. Se creará la carpeta code/ con la extensión.

Paso 2 — Configuración en el panel de Magento

  1. Accede al panel de administración de Magento.
  2. Ve a Stores → Configuration → Sales → Payments Way Configuration.
  3. Ingresa tus datos: Terminal ID, Form ID, Merchant ID, API Key y Response URL.
  4. Haz clic en Save Config.
  5. Ve a System → Cache Management y limpia el caché completo.

Realiza una compra de prueba para confirmar que el checkout redirige correctamente al portal de PaymentsWay y que la respuesta se procesa en tu tienda.

Plugins

VTEX

VTEX es la plataforma de comercio digital líder en Latinoamérica, utilizada por grandes marcas y retailers para gestionar sus tiendas en línea con alto volumen de transacciones. Con el conector nativo de PaymentsWay puedes activar Visa, Mastercard y PSE en tu tienda VTEX en tres pasos simples — sin desarrollo, sin código, en menos de 15 minutos.

Sin desarrollo
Configuración 100% visual desde el panel de VTEX.
💳
Visa · Mastercard · PSE
Los tres métodos activos con un solo conector.
🔒
Certificado IO
Conector oficial VTEX Payment Provider.
🔄
Redirect seguro
El cliente paga en el portal de PaymentsWay y vuelve a tu tienda.

Flujo de integración

El diagrama muestra los tres pasos de configuración (que se hacen una sola vez) y el flujo de cada pago desde el checkout de VTEX hasta la confirmación:

Integración PaymentsWay en VTEX CONFIGURACIÓN — se hace una sola vez 01 Generar App Key Account Settings API Keys → Generate vtexappkey-tienda-XXXX + App Token (guardar ya) 02 Crear Proveedor Store Settings → Payment Providers → New Provider merchantId · terminalId · formId apiKey · App Key · App Token 03 Métodos de Pago Payment Conditions → "+" Visa · Mastercard · PSE Provider: PaymentsWay Estado: ACTIVE ✓ ✅ Tienda lista PaymentsWay activo en el checkout FLUJO DE PAGO — por cada transacción 🛒 Cliente checkout VTEX VTEX Checkout Selecciona método Visa / MC / PSE Conector PW Redirige al portal de PaymentsWay Portal PaymentsWay Cliente paga Banco / Red de pagos Autoriza la transacción respuesta regresa a la tienda ✅ Pago aprobado Orden confirmada en VTEX ❌ Pago rechazado Cliente vuelve al checkout 📡 WebHook automático PaymentsWay notifica a VTEX el resultado de cada transacción sin configuración adicional Conector: PaymentsWay v1.0.0 · Tipo: VTEX IO Connector · Moneda: COP Flujo: Redirect · Producción: https://merchant.paymentsway.co · Soporte: soporte@paymentsway.co

Requisitos previos

Antes de iniciar ten a mano los siguientes datos — los entrega el equipo de PaymentsWay:

DatoEjemploDónde obtenerlo
Merchant ID65Panel PaymentsWay → Mis Credenciales
Terminal ID511Panel PaymentsWay → Mis Credenciales
Form ID602Panel PaymentsWay → Botones de Pago
API KeyN2Y5NGQy...Solicitar a soporte@paymentsway.co

Necesitas acceso de administrador a tu tienda VTEX con rol Owner o Finance.

Paso 1 — Generar App Key y App Token en VTEX

El App Key y App Token son las credenciales que permiten al conector de PaymentsWay comunicarse de forma segura con tu tienda VTEX. Se generan una sola vez.

📍

Ruta: Ícono de usuario (arriba a la derecha) → Account SettingsAPI Keys
URL directa: https://{su-cuenta}.myvtex.com/admin/api-keys

  1. Inicia sesión en el admin de tu tienda VTEX: https://{su-cuenta}.myvtex.com/admin
  2. Haz clic en el avatar de usuario (esquina superior derecha) y selecciona "Account Settings".
  3. Haz clic en "API Keys" y luego en "+ New API Key" (o "Generate Key").
  4. Asigna el nombre "PaymentsWay-Produccion" y el rol "Owner" (o mínimo "FinancePayments").
  5. Haz clic en "Generate". VTEX te mostrará el App Key y un link para obtener el App Token — copia ambos de inmediato.

El App Token se muestra una sola vez. Si cierras la pantalla sin copiarlo tendrás que generar uno nuevo. Guárdalo en un gestor de contraseñas.
El App Key tiene el formato: vtexappkey-{nombretienda}-XXXXXX

CampoEjemplo
App Keyvtexappkey-mitienda-UCXFKW
App TokenXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (cadena larga)

Paso 2 — Crear el proveedor de pago PaymentsWay

📍

Ruta: Store Settings → Payment → Providers
URL directa: https://{su-cuenta}.myvtex.com/admin/affiliations

  1. En el menú lateral ve a Store Settings → Payment → Providers.
  2. Haz clic en "New Provider", escribe "PaymentsWay" en el buscador y selecciónalo.
  3. Completa el formulario con los valores de la siguiente tabla.
  4. Haz clic en "Guardar". El proveedor aparecerá como "Production".
Campo del formularioValor a ingresar
Nombre (Name)PaymentsWay Prod (o el nombre que prefieras)
Ambiente (Mode)Production
App KeyEl App Key generado en el Paso 1
App TokenEl App Token generado en el Paso 1
merchantIdEntregado por PaymentsWay. Ej: 65
terminalIdEntregado por PaymentsWay. Ej: 511
formIdEntregado por PaymentsWay. Ej: 602
apiKeyClave API de PaymentsWay (diferente al App Key de VTEX)
Workspacemaster

El campo apiKey es la clave de PaymentsWay, distinta al App Key de VTEX. Si la clave tiene espacios o saltos de línea, pégala sin ellos. Su longitud debe ser múltiplo de 4 — si no, añade = al final.

Paso 3 — Configurar métodos de pago

Repite este proceso una vez por cada método: Visa, Mastercard y PSE.

📍

Ruta: Store Settings → Payment → Settings → pestaña "Payment Conditions"
URL directa: https://{su-cuenta}.myvtex.com/admin/pci-gateway#/rules

  1. Haz clic en el botón verde "+" para agregar una nueva condición.
  2. Busca y selecciona el método de pago: Visa.
  3. En el campo Provider selecciona "PaymentsWay".
  4. Asigna el nombre "PaymentsWay Visa".
  5. Cuotas: deja "En una cuota" o configura según tu necesidad.
  6. Haz clic en "Guardar". Repite para Mastercard y PSE.

PSE es un método de débito bancario exclusivo para Colombia. No requiere configuración de cuotas — siempre es un pago en una sola cuota. El cliente es redirigido al portal de su banco para completar el pago.

Al terminar la sección Payment Conditions debe mostrar:

MétodoNombreEstado
VISAPaymentsWay VisaACTIVE
MASTERCARDPaymentsWay MastercardACTIVE
PSEPaymentsWay PSEACTIVE

Datos de referencia del conector

ParámetroValor
Nombre del conectorPaymentsWay
Versión1.0.0
Tipo de integraciónVTEX Payment Provider (IO Connector)
Flujo de pagoRedirect — redirige al portal de PaymentsWay y regresa a la tienda
Ambiente de producciónhttps://merchant.paymentsway.co
Métodos soportadosVisa, Mastercard, PSE (débito bancario Colombia)
MonedaCOP (Peso Colombiano)
Reembolsos / CancelacionesGestionados directamente en el portal de PaymentsWay

Verificación final

Realiza una compra de prueba desde el checkout de tu tienda con un monto mínimo ($1.055 COP) para confirmar que el flujo redirige correctamente al portal de PaymentsWay y regresa a la tienda al completar la transacción.

Soporte

CanalDetalle
Emailsoporte@paymentsway.co
Webwww.paymentsway.co
Teléfono601-7035887 · 315-5546305
DirecciónCarrera 11A N° 93-52, oficina 503, Bogotá, Colombia
API — Links de Pago

Crear link con redirección

Genera un link de pago desde tu backend. El cliente es redirigido automáticamente al checkout al acceder al link.

POST https://merchant.paymentsway.co/link-de-pago/create

Envía tu Api_key en el header Authorization.

Parámetros

CampoTipoDescripciónReq.
merchant_idstringMerchant ID.
form_idstringForm ID.
terminal_idstringTerminal ID.
order_numberstringReferencia única de la transacción.
amountnumberMonto de la transacción.
currencystringCOP, USD o EUR.
order_descriptionstringDescripción de la compra.
client_emailstringEmail del cliente.No
client_phonestringTeléfono del cliente.No
response_urlstringURL de retorno tras el pago.No
additional_dataobjectDatos extra que se retornan en el webhook.No
checksumstringFirma de seguridad SHA-256.No

Ejemplo de petición

JavaScript
const response = await fetch("https://merchant.paymentsway.co/link-de-pago/create", {
  method : 'POST',
  headers: {
    "Authorization": "TU_API_KEY",
    "Content-Type" : "application/json"
  },
  body: JSON.stringify({
    "merchant_id"      : 7890,
    "form_id"          : "",
    "terminal_id"      : "",
    "order_number"     : "ORD-456789",
    "amount"           : 55000,
    "currency"         : "COP",
    "order_description": "Compra de productos",
    "client_email"     : "cliente@example.com",
    "response_url"     : "https://example.com/gracias",
  })
});

const data = await response.json();
console.log(data);

Errores

JSON — 400
{ "error": true, "data": "" }
API — Links de Pago

Crear link de pago

Genera un link de pago sin redirección automática. El cliente accede manualmente al link.

POST https://merchant.paymentsway.co/cartaspago/returnUrl

Los parámetros son idénticos al endpoint Crear link con redirección.

Seguridad

Checksum

El checksum garantiza la integridad de los datos enviados entre tu servidor y PaymentsWay. Se genera con SHA-256.

¿Cómo se genera?

Se concatenan los siguientes campos separados por ; y se aplica SHA-256:

Formato
"{idForm};{apikey};{idMerchant};{amount};{externalOrder}"

Ejemplo

JavaScript
import { sha256 } from 'crypto-js';

const createChecksum = (idForm, idMerchant, apikey, amount, externalOrder) =>
  sha256(`${idForm};${apikey};${idMerchant};${amount};${externalOrder}`)
    .toString();

// Uso:
const checksum = createChecksum('123', '456', 'mi-api-key', '50000', 'ORD-001');
API Común

Obtener Tipos de Identificación

Retorna el catálogo completo de tipos de documento válidos en el sistema. Usa estos IDs en todos los endpoints que requieran identification_type o client_doctype.

GEThttps://serviceregister.paymentsway.co/ClientAPI/ObtenerTiposIdentificacion

Headers

Envía tu Api_key en el header Authorization.

Tipos disponibles

IDDescripción
1Pasaporte
4Cédula de ciudadanía
5Cédula de extranjería
6NIT

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/ObtenerTiposIdentificacion",
  { method: 'GET', headers, redirect: 'follow' }
);
const tipos = await res.json();
console.log(tipos);
API Común

Obtener Tipos de Estados

Retorna todos los estados de transacción disponibles en el sistema con sus IDs. Usa estos valores para interpretar el campo idstatus del webhook.

GEThttps://serviceregister.paymentsway.co/ClientAPI/GetAllTransactionStatuses
const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/GetAllTransactionStatuses",
  { method: 'GET', headers, redirect: 'follow' }
);
const estados = await res.json();
console.log(estados);
API Común

Crear Persona

Registra un cliente en el sistema de PaymentsWay. El ID retornado se usa para tokenizar tarjetas.

POSThttps://serviceregister.paymentsway.co/ClientAPI/CrearPersona

Parámetros

CampoTipoDescripciónReq.
firstnamestringNombre.
lastnamestringApellidos.
identificationstringNúmero de documento.
ididentificationtypestringTipo de identificación.
emailstringCorreo electrónico.
phonestringNúmero de celular.
addressstringDirección.No
citystringCiudad.No
zipcodestringCódigo postal.No
JavaScript
const res = await fetch("https://serviceregister.paymentsway.co/ClientAPI/CrearPersona", {
  method : 'POST',
  headers: { "x-api-key": "TU_API_KEY", "Content-Type": "application/json" },
  body   : JSON.stringify({
    firstname: "Juan", lastname: "Pérez",
    ididentificationtype: "4", identification: "10000000",
    email: "juan@email.com", phone: "3000000000"
  })
});
const { id } = await res.json(); // usa este id para tokenizar
API Común

Obtener Transacción

Consulta el estado y detalle completo de una transacción usando su referencia externa (order_number o external_order).

GEThttps://serviceregister.paymentsway.co/ClientAPI/ObtenerTransaccionByExternalOrder?external_order={id}

Solo disponible para usuarios con certificación PCI y DSS.

Headers

Envía tu Api_key en el header Authorization.

Query params

ParámetroTipoDescripciónReq.
external_orderstringLa referencia externa única asignada por tu sistema al crear la transacción.

Ejemplo de petición

JavaScript
const externalOrder = "ORD-456789";

const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");

const res = await fetch(
  `https://serviceregister.paymentsway.co/ClientAPI/ObtenerTransaccionByExternalOrder?external_order=${externalOrder}`,
  { method: 'GET', headers, redirect: 'follow' }
);
const transaccion = await res.json();
console.log(transaccion);
API Común

Obtener Persona Por Documento

Busca un cliente ya registrado en el sistema usando su número de documento. Útil para verificar si un usuario ya existe antes de crearlo.

POSThttps://serviceregister.paymentsway.co/ClientAPI/ObtenerPersonaPorDocumento

Solo disponible para usuarios con certificación PCI y DSS.

Headers

Envía tu Api_key en el header x-api-key.

Cuerpo de la petición

CampoTipoDescripciónReq.
nroDocumentointegerNúmero de documento de identidad de la persona.
JSON — Body
{ "nroDocumento": 1012427594 }

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("x-api-key", "TU_API_KEY");
headers.append("Content-Type", "application/json");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/ObtenerPersonaPorDocumento",
  {
    method: 'POST',
    headers,
    body: JSON.stringify({ "nroDocumento": 1012427594 }),
    redirect: 'follow'
  }
);
const persona = await res.json();
console.log(persona);
Card

Crear Transacción Tarjeta de Crédito

Procesa un pago directo con tarjeta de crédito o débito. Requiere certificación PCI DSS. Usa los datos reales de la tarjeta del cliente para ejecutar el cobro.

POSThttps://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionTC

Solo disponible para usuarios con certificación PCI y DSS. Maneja los datos de tarjeta únicamente bajo cumplimiento PCI.

Headers

Envía tu Api_key en el header x-api-key.

Parámetros

CampoTipoDescripciónReq.
amountintegerValor del pago.
firstnamestringNombres del pagador.
lastnamestringApellidos del pagador.
card_identificationstringNúmero de identificación del pagador.
identification_typeintegerTipo de identificación del pagador.
card_holderstringNombre completo tal como aparece en la tarjeta.
card_panstringNúmero de la tarjeta sin espacios ni guiones.
card_expiry_yearstringAño de expiración. Ej: "26".
card_expiry_monthstringMes de expiración. Ej: "06".
card_cvvstringCódigo CVV/CVC de la tarjeta.
descriptionstringDescripción breve de la orden.
installmentsintegerNúmero de cuotas. Enviar 1 para pago de contado.
external_orderstringReferencia única de la transacción en tu sistema.
dynamic_descriptorstringTexto que aparece en el extracto del cliente.
terminal_idintegerID de la terminal.
form_idintegerID del formulario/botón de pago.
ipstringDirección IP del pagador.
autorizacionDatosbooleanEl pagador autoriza usar sus datos para tokenizar la tarjeta.
url_okstringURL de redirección si el pago es exitoso.No
url_kostringURL de redirección si el pago falla.No
additionalDataobjectDatos adicionales que se retornan en el webhook.No

Cuerpo de ejemplo

JSON
{
  "amount"           : 300000,
  "firstname"        : "Pepito",
  "lastname"         : "Perez",
  "card_identification": "1012345678",
  "identification_type": 4,
  "card_holder"      : "PEPITO PEREZ PA",
  "card_pan"         : "4111111111111111",
  "card_expiry_year" : "26",
  "card_expiry_month": "06",
  "card_cvv"         : "123",
  "url_ok"           : "https://tu-sitio.com/pago-exitoso",
  "url_ko"           : "https://tu-sitio.com/pago-fallido",
  "description"      : "Compra en mi tienda",
  "installments"     : 1,
  "external_order"   : "trc231566",
  "dynamic_descriptor": "Mi Tienda Online",
  "terminal_id"      : 34,
  "form_id"          : 34,
  "ip"               : "192.168.0.1",
  "additionalData"   : { "ref": "mi-referencia" },
  "autorizacionDatos": true
}

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("x-api-key", "TU_API_KEY");
headers.append("Content-Type", "application/json");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionTC",
  { method: 'POST', headers, body: JSON.stringify(body), redirect: 'follow' }
);
const resultado = await res.json();

// Si hay url_3ds, redirige para autenticación 3D Secure
if (resultado.url_3ds) {
  window.location.href = resultado.url_3ds;
}
Card

Reversar Transacción

Anula una transacción aprobada y devuelve el cobro al cliente. El idTransaction es el identificador interno de PaymentsWay, retornado en la respuesta de Crear Transacción Tarjeta de Crédito.

POSThttps://serviceregister.paymentsway.co/ClientAPI/ReversarTransaccion

Headers

Envía tu Api_key en el header Authorization.

Cuerpo de la petición

CampoTipoDescripciónReq.
idTransactionintegerIdentificador interno de la transacción en PaymentsWay.
JSON — Body
{ "idTransaction": 1360 }

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");
headers.append("Content-Type", "application/json");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/ReversarTransaccion",
  {
    method: 'POST',
    headers,
    body: JSON.stringify({ "idTransaction": 1360 }),
    redirect: 'follow'
  }
);
const resultado = await res.json();
console.log(resultado);
Card

Tokenizar Tarjetas

Permite tokenizar una tarjeta de crédito para cobros recurrentes sin que el cliente tenga que ingresarla nuevamente.

Flujo

  1. Crea una persona — obtienes un idperson.
  2. Llama a TokenizarDatosPersona con el idperson y datos de la tarjeta.
  3. Recibes un token. Muestra el embed en tu página para que el cliente complete el proceso.
POSThttps://serviceregister.paymentsway.co/ClientAPI/TokenizarDatosPersona
JSON — Body
{
  "documento"          : "10000000",
  "identification_type": 4,
  "idperson"           : 8,
  "url"                : "https://tu-sitio.com",
  "form_id"            : 368,
  "amount"             : "100",
  "external_order"     : "Test_02",
  "ip"                 : "127.0.0.1",
  "currencycode"       : "COP",
  "description"        : "Descripción",
  "installments"       : 1
}

Embed de tokenización

Tu URL debe estar autorizada. Escribe a tecnologia@paymentsway.co para activarla.

HTML
<embed id="embed" width="500px" height="320px"></embed>
<script defer>
  const token = 'token-recibido';
  document.getElementById('embed').src =
    `https://merchant.paymentsway.co/tokenizacion/?p=${token}`;
</script>
Card

Estados de transacción aprobada

Códigos de respuesta cuando una transacción es autorizada exitosamente.

CódigoDescripción
00Aprobada
08Aprobada — solicitar más información
11Aprobada VIP
76Aprobada (Privado)
77Aprobada — pendiente identificación
78Aprobada a ciegas
79Aprobada — transacción administrativa
80Aprobada por boletín de seguridad
81Aprobada por el establecimiento
Card

Estados de transacción rechazada

Códigos de respuesta cuando una transacción es negada por el sistema o el banco emisor.

CódigoDescripción
01Negada — comuníquese con su entidad
03Negada — comercio inválido
04Negada — retener tarjeta
05Negada — tarjeta bloqueada o timeout
09Negada — transacción duplicada
12Negada — transacción inválida
13Negada — monto inválido
14Negada — estado de la tarjeta inválido
38Negada — intentos de PIN excedidos
41Negada — tarjeta robada o extraviada
51Negada — fondos insuficientes
54Negada — tarjeta vencida
55Negada — PIN inválido
57Negada — transacción no permitida
61Negada — excede el monto máximo
65Negada — límite de usos excedido
68Negada — TIMEOUT
91Negada — no es posible autorizar
94Negada — transacción duplicada
97Negada — número de documento inválido
98Negada — CVV2 inválido
TONegada — time out
PSE

Obtener Listado de Bancos

Retorna el catálogo de bancos habilitados para transacciones PSE. Los campos CodigoBanco y NombreBanco retornados aquí se usan directamente en el endpoint Crear Transacción PSE.

GEThttps://serviceregister.paymentsway.co/ClientAPI/ObtenerListadoBancos

Solo disponible para usuarios con certificación PCI y DSS.

Headers

Envía tu Api_key en el header Authorization.

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/ObtenerListadoBancos",
  { method: 'GET', headers, redirect: 'follow' }
);
const bancos = await res.json();
console.log(bancos);

Ejemplo de respuesta

JSON
[
  { "CodigoBanco": "10512", "NombreBanco": "BANCO DAVIVIENDA" },
  { "CodigoBanco": "10007", "NombreBanco": "BANCOLOMBIA" },
  { "CodigoBanco": "10001", "NombreBanco": "BANCO DE BOGOTA" }
]
PSE

Crear Transacción PSE

Inicia una transacción de débito bancario a través de PSE (Pagos Seguros en Línea). El cliente es redirigido al portal de su banco para autorizar el pago.

POSThttps://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionPSE

Solo disponible para usuarios con certificación PCI y DSS. Obtén primero el listado de bancos con ObtenerListadoBancos.

Headers

Envía tu Api_key en el header x-api-key.

Parámetros

CampoTipoDescripciónReq.
amountintegerValor del pago en pesos colombianos.
PersonTypestring"0" Persona Natural · "1" Persona Jurídica (en formato string).
identification_typeintegerTipo de identificación del pagador (ver ObtenerTiposIdentificacion).
DocumentostringNúmero de identificación del pagador.
CorreostringEmail del pagador.
NombresstringNombres del pagador.
ApellidosstringApellidos del pagador.
CelularstringNúmero de celular del pagador.
DireccionstringDirección del pagador.
external_orderstringIdentificador único de la transacción en tu sistema.
CodigoBancostringCódigo del banco (obtenido de ObtenerListadoBancos).
NombreBancostringNombre del banco (obtenido de ObtenerListadoBancos).
entityurlstringURL a la que redirige al cliente cuando el pago es exitoso.
terminal_idintegerID de la terminal.
form_idintegerID del formulario/botón de pago.
ipstringDirección IP del pagador.
additionalDataobjectDatos adicionales que se retornan en el webhook.No

Cuerpo de ejemplo

JSON
{
  "amount"             : 30000,
  "PersonType"         : "0",
  "identification_type": 4,
  "Documento"          : "1012345678",
  "Correo"             : "cliente@email.com",
  "Nombres"            : "Ana",
  "Apellidos"          : "Perez",
  "Celular"            : "3167225855",
  "Direccion"          : "Calle 32 # 74-31",
  "external_order"     : "ORD-PSE-001",
  "CodigoBanco"        : "10512",
  "NombreBanco"        : "BANCO DAVIVIENDA",
  "entityurl"          : "https://tu-sitio.com/pago-exitoso",
  "terminal_id"        : 34,
  "form_id"            : 34,
  "ip"                 : "192.168.0.1",
  "additionalData"     : { "referencia": "mi-referencia" }
}

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("x-api-key", "TU_API_KEY");
headers.append("Content-Type", "application/json");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionPSE",
  { method: 'POST', headers, body: JSON.stringify(body), redirect: 'follow' }
);
const resultado = await res.json();

// Redirige al cliente al portal PSE
if (resultado.urlBanco) {
  window.location.href = resultado.urlBanco;
}
Efectivo

Obtener Medios De Pago en Efectivo

Retorna el listado de métodos de pago en efectivo habilitados (Efecty, Baloto, etc.). El campo method retornado aquí se envía directamente en Crear Transacción Cash.

GEThttps://serviceregister.paymentsway.co/ClientAPI/ObtenerMediosDePago

Solo disponible para usuarios con certificación PCI y DSS.

Headers

Envía tu Api_key en el header Authorization.

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("Authorization", "TU_API_KEY");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/ObtenerMediosDePago",
  { method: 'GET', headers, redirect: 'follow' }
);
const medios = await res.json();
console.log(medios);
Efectivo

Crear Transacción Cash

Genera un recibo de pago en efectivo para que el cliente cancele en un punto físico (Efecty, Baloto, Su Red, etc.). El cliente recibe un voucher con el código de pago.

POSThttps://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionCash

Solo disponible para usuarios con certificación PCI y DSS. Obtén los métodos disponibles con ObtenerMediosDePago.

Headers

Envía tu Api_key en el header x-api-key.

Parámetros

CampoTipoDescripciónReq.
amountintegerValor del pago en pesos colombianos.
external_orderstringReferencia única de la transacción en tu sistema.
descriptionstringDescripción breve de la orden.
methodstringMétodo de pago en efectivo. Obtenido de ObtenerMediosDePago. Ej: efecty.
ivaintegerIVA del pago. Si no aplica enviar 0.
user_identificationstringNúmero de identificación del pagador.
identification_typestringTipo de identificación: CC, CE, NIT, DNI.
user_namestringNombre del pagador.
user_last_namestringApellido del pagador.
user_emailstringEmail del pagador.
user_phonestringCelular del pagador.
user_addressstringDirección del pagador.
terminal_idintegerID de la terminal.
form_idintegerID del formulario/botón de pago.
ipstringDirección IP del pagador.
additionalDataobjectDatos adicionales que se retornan en el webhook.No

Cuerpo de ejemplo

JSON
{
  "amount"              : 30000,
  "external_order"      : "ORD-CASH-001",
  "description"         : "Pago membresía mensual",
  "method"              : "efecty",
  "iva"                 : 0,
  "user_identification" : "1012345678",
  "identification_type" : "CC",
  "user_name"           : "Andres",
  "user_last_name"      : "Camil",
  "user_email"          : "andres@example.com",
  "user_phone"          : "3227358312",
  "user_address"        : "Cra 8b 17 15",
  "terminal_id"         : 34,
  "form_id"             : 34,
  "ip"                  : "192.168.0.1",
  "additionalData"      : { "ref": "valor" }
}

Ejemplo de petición

JavaScript
const headers = new Headers();
headers.append("x-api-key", "TU_API_KEY");
headers.append("Content-Type", "application/json");

const res = await fetch(
  "https://serviceregister.paymentsway.co/ClientAPI/CrearTransaccionCash",
  { method: 'POST', headers, body: JSON.stringify(body), redirect: 'follow' }
);
const resultado = await res.json();

// resultado.urlVoucher contiene el link al voucher de pago
console.log(resultado);
WebHook

WebHook

Recibe notificaciones en tiempo real sobre el resultado de cada transacción. PaymentsWay hace un HTTP POST a tu endpoint cuando una transacción cambia de estado.

Tu endpoint debe usar HTTPS (SSL). Las peticiones sin SSL serán rechazadas. Tu página de notificación no debe incluir código HTML — actualiza tus bases de datos y responde con el status correcto.

Estados y cómo responder

Responde con 200 únicamente cuando el estado es Exitosa (id 34). Para todos los demás estados responde 201.

IDEstadoTu respuesta HTTP
1Creada201
34Exitosa200
35Pendiente201
36Fallida201
38Cancelada201
39Reembolsada201
40Pendiente efectivo201

Campos del payload

CampoTipoDescripciónMétodo
idnumberIdentificador interno único de la transacción en PaymentsWay.Todos
amountnumberValor cobrado al cliente.Todos
externalorderstringReferencia de la orden generada por tu sistema.Todos
fullnamestringNombre completo del cliente.Todos
ipstringDirección IP del cliente durante la transacción.Todos
additionaldataJSONInformación adicional enviada al crear la transacción.Todos
idstatusobjectEstado de la transacción: { id, nombre }.Todos
idpersonobjectDatos del cliente: { id, firstname, lastname, identification, email, phone }.Todos
paymentmethodobjectMétodo de pago usado: { id, nombre }.Todos
idmerchantstringID del comercio receptor del pago.Todos
innerexceptionobjectDetalle del rechazo PSE: { codigo, causal }. Solo cuando el estado es NOT_AUTHORIZED en PSE.PSE

Ejemplo de payload — Transacción exitosa

JSON
{
  "id"            : "822",
  "ammount"       : 4000,
  "externalorder" : "12001",
  "ip"            : "172.0.0.1",
  "fullname"      : "",
  "additionaldata": null,
  "idstatus"      : { "id": 34, "nombre": "Exitosa" },
  "idperson"      : {
    "id"            : "60",
    "firstname"     : "Ejemplo nombre",
    "lastname"      : "Ejemplo apellido",
    "identification": "1200345601",
    "email"         : "",
    "phone"         : ""
  },
  "paymentmethod": { "id": 2, "nombre": "PSE" },
  "idmerchant"   : "1"
}

Ejemplo de payload — PSE rechazado (con innerexception)

Solo cuando el estado PSE es NOT_AUTHORIZED, el campo innerexception indica la causal detallada del rechazo bancario.

JSON
{
  "id"            : "id",
  "amount"        : 100,
  "externalorder": "external",
  "ip"            : "127.0.0.1",
  "fullname"      : "",
  "additionaldata": {},
  "innerexception": { "codigo": "00001", "causal": "CUENTA NO EXISTE" },
  "idstatus"      : { "id": 36, "nombre": "Fallida" },
  "idperson"      : {
    "id": "", "firstname": "", "lastname": "",
    "identification": "", "email": "", "phone": ""
  },
  "paymentmethod": { "id": 2, "nombre": "PSE" },
  "idmerchant"   : ""
}

Ejemplo de handler en Node.js

JavaScript — Node.js / Express
app.post('/webhook/paymentsway', async (req, res) => {
  const { id, externalorder, idstatus, idperson, amount } = req.body;

  if (idstatus?.id === 34) {
    // Transacción exitosa — actualiza tu base de datos
    await db.updateOrder(externalorder, { status: 'paid', amount });
    return res.status(200).send('OK');
  }

  // Cualquier otro estado
  return res.status(201).send('RECEIVED');
});
BReB — QR

BReB — QR

BReB (Botón de Recaudo Bancario) es el estándar colombiano de pagos inmediatos QR impulsado por Banco de la República de Colombia. PaymentsWay lo implementa sobre la infraestructura de VePay / qrvbreb.vepay.com.co, cumpliendo el estándar QR. Permite recibir pagos desde cualquier app bancaria del ecosistema ACH.

🔑
Login
Obtén el JWT para autenticar las demás llamadas.
📱
Generar QR
Crea un QR estático o dinámico con datos del comercio.
Verificar
Valida el token JWT del QR generado.
🔍
Consulta
Consulta el estado actual de un QR por su ID.
🔄
Status
Actualiza el estado de un QR (pagado, expirado, etc.).

Flujo completo QR

El siguiente diagrama muestra los 5 pasos del ciclo de vida de un QR BReB, desde el login hasta la confirmación del pago:

COMERCIO / TU APP PAYMENTSWAY + VEPAY CLIENTE / APP BANCARIA BANCO DEL CLIENTE ACH COLOMBIA 1. POST Login /api/auth/login Valida creds retorna JWT token JWT 2. POST Generar /api/qr/generate Genera QR string + imagen QR data muestra QR Escanea QR con app bancaria Autoriza débito biometría / PIN Procesa transferencia notifica 4. POST Verificar /api/auth/verify 5. GET Consulta /api/qr/{id} PATCH Status actualiza estado 1 2 3 4 5 Base URL: https://qrvbreb.vepay.com.co Auth: Bearer JWT (obtenido en paso 1) Estándar: QR / Banco de la República de Colombia

URL Base y autenticación

Base URL
https://qrvbreb.vepay.com.co

Todos los endpoints (excepto Login) requieren el header Authorization: Bearer {token} con el JWT obtenido en el paso 1.

Las credenciales de acceso (username y password) son proporcionadas por PaymentsWay. Contacta a tecnologia@paymentsway.co para habilitarlas.

Tipos de QR

TipoCódigoDescripciónCuándo usarlo
Estático11Un solo QR permanente, sin monto fijo.Punto de venta físico, vitrina, impreso.
Dinámico12QR por transacción con monto y referencia.E-commerce, cobros específicos, facturas.

Ecosistema compatible

Bancolombia App Nequi Daviplata BBVA Colombia Davivienda App Banco de Bogotá Falabella + todas las entidades ACH
BReB — QR

01 — Login

Autentícate con las credenciales entregadas por PaymentsWay para obtener el JWT Bearer token que necesitas en todas las demás llamadas. El token expira en 1 hora.

POST https://qrvbreb.vepay.com.co/api/auth/login

Headers

HeaderValor
Content-Typeapplication/json

Cuerpo de la petición

CampoTipoDescripciónReq.
usernamestringUsuario proporcionado por PaymentsWay.
passwordstringContraseña proporcionada por PaymentsWay.
JSON — Body
{
  // Username y Password que comparte Payments Way
  "username": "",
  "password": ""
}

Ejemplo de petición

JavaScript
const res = await fetch('https://qrvbreb.vepay.com.co/api/auth/login', {
  method : 'POST',
  headers: { 'Content-Type': 'application/json' },
  body   : JSON.stringify({
    username: 'TU_USUARIO',
    password: 'TU_PASSWORD'
  })
});
const { token } = await res.json();
// Guarda el token para usarlo en las demás llamadas
localStorage.setItem('breb_token', token);

cURL

cURL
curl --location 'https://qrvbreb.vepay.com.co/api/auth/login' \\
--header 'Content-Type: application/json' \\
--data '{
  "username": "",
  "password": ""
}'
BReB — QR

02 — Generar QR

Genera un código QR siguiendo el estándar QR. Puedes crear QRs estáticos (11) para puntos de venta físicos o dinámicos (12) para cobros específicos con monto fijo.

POST https://qrvbreb.vepay.com.co/api/qr/generate

Requiere el header Authorization: Bearer {token} obtenido en el paso Login.

QR Estático (11) vs QR Dinámico (12)

QR Estático (11) value: "0.00" Un QR, N pagos vs QR Dinámico (12) value: "5000.00" Un QR, un pago exacto Uso estático: Caja · Mostrador Afiche impreso Uso dinámico: E-commerce · Factura Cobro a distancia

Headers

HeaderValorReq.
AuthorizationBearer {token}
Content-Typeapplication/json

Parámetros del body

CampoTipoDescripciónReq.
payloadFormatIndicatorstringSiempre "01". Versión del estándar QR.
pointOfInitiationMethodstring"11" = estático · "12" = dinámico.
merchantAccountInformationobjectInformación de la cuenta del comercio.
.keytypestringTipo de llave: PHONE · NRIC · EMAIL · ALPHANUM · MERCHANTCODE
.keystringValor de la llave. Límites: PHONE=10, NRIC=15, ALPHANUM=50, MERCHANTCODE=20.
.merchantNamestringNombre del comercio (visible en la app del pagador).
.merchantCitystringCiudad del comercio.
.postalCodestringCódigo postal del comercio.
.merchantCategoryCodestringCódigo MCC del comercio (4 dígitos). Ej: "0000" para genérico.
transactionobjectDatos de la transacción.
.valuestringMonto en COP con hasta 2 decimales. Para QR dinámico usar "0".
.currencystringCódigo ISO 4217. Para COP usar "CO" (internamente mapea a 170).

Cuerpo de ejemplo

JSON — QR Dinámico (cobro por $5.000)
{
  // Siempre debe ser "01"
  "payloadFormatIndicator": "01",
  // 11 = estático, 12 = dinámico
  "pointOfInitiationMethod": "12",
  "merchantAccountInformation": {
    // Tipo de llave: PHONE, NRIC, EMAIL, ALPHANUM, MERCHANTCODE
    "keytype"       : "PHONE",
    // Número de celular registrado del comercio (10 dígitos)
    "key"           : "3001234567",
    "merchantName"  : "Mi Tienda Online",
    "merchantCity"  : "Bogota",
    "postalCode"    : "110111",
    // Código MCC — 0000 para genérico
    "merchantCategoryCode": "0000"
  },
  "transaction": {
    // Monto con 2 decimales. QR dinámico: "0"
    "value"   : "5000.00",
    // Para COP usar "CO" (ISO 4217: 170)
    "currency": "CO"
  }
}

cURL

cURL
curl --location 'https://qrvbreb.vepay.com.co/api/qr/generate' \\
--header 'Authorization: Bearer TU_JWT_TOKEN' \\
--header 'Content-Type: application/json' \\
--data '{
  "payloadFormatIndicator": "01",
  "pointOfInitiationMethod": "12",
  "merchantAccountInformation": {
    "keytype": "PHONE",
    "key": "3001234567",
    "merchantName": "Mi Tienda Online",
    "merchantCity": "Bogota",
    "postalCode": "110111",
    "merchantCategoryCode": "0000"
  },
  "transaction": {
    "value": "5000.00",
    "currency": "CO"
  }
}'

Ejemplo JavaScript

JavaScript
const token = localStorage.getItem('breb_token'); // obtenido en Login

const res = await fetch('https://qrvbreb.vepay.com.co/api/qr/generate', {
  method : 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type' : 'application/json'
  },
  body: JSON.stringify({
    payloadFormatIndicator : "01",
    pointOfInitiationMethod: "12",
    merchantAccountInformation: {
      keytype             : "PHONE",
      key                 : "3001234567",
      merchantName        : "Mi Tienda Online",
      merchantCity        : "Bogota",
      postalCode          : "110111",
      merchantCategoryCode: "0000"
    },
    transaction: { value: "5000.00", currency: "CO" }
  })
});
const qrData = await res.json();
// qrData contiene el QR string (EMV) y/o imagen para mostrar al cliente
console.log(qrData);
BReB — QR

03 — Verificar Token

Verifica que un JWT token (generado en el paso Generar QR) sea válido y no haya expirado. Úsalo para validar el QR antes de mostrarlo al cliente o para confirmar que la sesión sigue activa.

POST https://qrvbreb.vepay.com.co/api/auth/verify

Headers

HeaderValor
Content-Typeapplication/json

Cuerpo

CampoTipoDescripciónReq.
tokenstringEl JWT token retornado en la respuesta de 02 — Generar QR.
JSON — Body
{
  // Token generado en 02 - Generar QR
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

cURL

cURL
curl --location 'https://qrvbreb.vepay.com.co/api/auth/verify' \\
--header 'Content-Type: application/json' \\
--data '{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'

Ejemplo JavaScript

JavaScript
const res = await fetch('https://qrvbreb.vepay.com.co/api/auth/verify', {
  method : 'POST',
  headers: { 'Content-Type': 'application/json' },
  body   : JSON.stringify({ token: qrData.token })
});
const verification = await res.json();
console.log(verification); // { valid: true, ... }
BReB — QR

Consulta

Consulta el estado y los detalles de un QR generado usando su id. Usa este endpoint para hacer polling y detectar cuándo el cliente ha completado el pago.

GET https://qrvbreb.vepay.com.co/api/qr/{id}

Headers

HeaderValorReq.
AuthorizationBearer {token}

Path Parameter

ParámetroTipoDescripción
idstringID del QR obtenido en la respuesta de 02 — Generar QR.

cURL

cURL
curl --location 'https://qrvbreb.vepay.com.co/api/qr/QR_ID_AQUI' \\
--header 'Authorization: Bearer TU_JWT_TOKEN'

Ejemplo JavaScript — Polling

JavaScript
// Polling cada 3 segundos hasta confirmar el pago
const pollQRStatus = (qrId, token) => {
  const interval = setInterval(async () => {
    const res = await fetch(
      `https://qrvbreb.vepay.com.co/api/qr/${qrId}`,
      { headers: { 'Authorization': `Bearer ${token}` } }
    );
    const qr = await res.json();

    if (qr.status === 'PAID' || qr.status === 'COMPLETED') {
      clearInterval(interval);
      console.log('✓ Pago confirmado', qr);
      // Actualiza tu UI y base de datos
    }

    if (qr.status === 'EXPIRED') {
      clearInterval(interval);
      console.log('QR expirado');
    }
  }, 3000);
};

pollQRStatus('QR_ID_AQUI', token);
BReB — QR

Status — Actualizar Estado

Actualiza el estado de un QR existente. Se usa para marcar un QR como pagado después de recibirla confirmación del banco, o para invalidarlo manualmente.

PATCH https://qrvbreb.vepay.com.co/api/qr/{id}/status

Headers

HeaderValorReq.
AuthorizationBearer {token}
Content-Typeapplication/json

Estados disponibles

EstadoDescripción
PENDINGQR generado, esperando escaneo y pago.
PAIDPago confirmado por el banco.
COMPLETEDTransacción completada y liquidada.
EXPIREDQR venció sin ser utilizado.
CANCELLEDQR invalidado manualmente.

Cuerpo de ejemplo

JSON — Body
{
  "status": "PAID"
}

cURL

cURL
curl --location --request PATCH \\
  'https://qrvbreb.vepay.com.co/api/qr/QR_ID_AQUI/status' \\
  --header 'Authorization: Bearer TU_JWT_TOKEN' \\
  --header 'Content-Type: application/json' \\
  --data '{ "status": "PAID" }'

Ejemplo JavaScript

JavaScript
const res = await fetch(
  `https://qrvbreb.vepay.com.co/api/qr/${qrId}/status`,
  {
    method : 'PATCH',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type' : 'application/json'
    },
    body: JSON.stringify({ status: 'PAID' })
  }
);
const result = await res.json();
console.log(result);
Integración BReB

Integración BReB — Transferencias BReB

Esta API permite hacer transferencias de dinero entre cuentas bancarias usando el sistema BReB de Integración BReB. Piénsala como el "mesero" entre tu app y los bancos: tú le dices a quién le mandas la plata y cuánto, y él se encarga de hacer todo el proceso por detrás para que el dinero llegue.

Esta sección es independiente del QR. Mientras el QR usa la infraestructura de VePay, Integración BReB conecta directamente con el sistema ACH de transferencias interbancarias.

¿Qué puedes hacer con este sistema?

🗝️
Gestionar llaves
Registra, consulta, edita y elimina las llaves (correo, celular, cédula) con las que identificas a tus clientes.
🏦
Buscar destinatario
Busca a quién le vas a transferir usando su llave registrada.
💸
Transferir
Envía dinero de una cuenta a otra, de forma inmediata.
🔍
Consultar pago
Verifica el estado de una transferencia específica.
📋
Historial
Ve todos los pagos de un cliente en un rango de fechas.

Flujo completo de una transferencia

El siguiente diagrama muestra el orden en que se usan los endpoints para completar una transferencia desde cero:

Flujo de transferencia BReB — Integración BReB CLIENTE / APP GESTIÓN DE LLAVES TRANSACCIÓN RESULTADO ?? Comercio 1. Registrar llave /register-key (solo 1ª vez) cédula, correo o celular del cliente OPCIONAL (1ª vez) 2. Consultar llave /get-key — verifica que existe retorna datos del titular 3. Buscar destinatario /get-target — a quién le mandas retorna targetResolutionId ★ ★ Guardar este ID para el paso 4 4. Realizar transferencia /transaction — envía el dinero usa targetResolutionId del paso 3 retorna paymentId ★ 5. Consultar pago /query-payment — verificar estado usa paymentId del paso 4 ✅ Transferencia exitosa dinero enviado, paymentId generado ❌ Error en transacción cuenta no existe, fondos insuf. ?? Historial / Reportes auditoría y conciliación 1 2 3 4 5

URL Base

Base URL
{BASE_URL}/visionamos

La URL base del entorno (producción / sandbox) es entregada por PaymentsWay al activar el servicio Integración BReB. Contacta a tecnologia@paymentsway.co.

Integración BReB

Consultar llave de cliente

Busca la llave (correo, celular o cédula) con la que un cliente está registrado en el sistema. Es como buscar un contacto en el celular — si existe, te muestra toda su información; si no existe, te avisa que no lo encontró.

¿Cuándo usarlo? Cuando quieres verificar si un cliente ya está registrado antes de enviarle una transferencia, o cuando necesitas los datos de la cuenta vinculada a una llave.

POST {BASE_URL}/breb/get-key

Parámetros

CampoTipoDescripciónReq.
channelstringPor dónde se hace la operación. Como decirle al banco si vas en persona o por app. Ej: "REDESALIADAS", "MOVIL", "WEB".
sourceServicestringServicio origen de la petición. Ej: "PEX".
userstringNombre del operador o usuario del sistema que hace la consulta. Ej: "jcano".
identificationstringNúmero de cédula del cliente a consultar. El mismo que te piden en cualquier banco. Ej: "1144134800".
typeIdentificationstringTipo de documento. "CC" para cédula de ciudadanía.
ipstringDirección IP del dispositivo. Como la dirección de tu casa, pero para el celular o computador. Ej: "192.168.0.1".
purposestringPropósito de la consulta. Ej: "Source".
uuidstringIdentificador único de la sesión o dispositivo. Como el número de serie de un celular. Ej: "a1b2c3d4e5f67890".
macstringDirección MAC del dispositivo. Un código único del hardware. Ej: "08:BD:01:00:00:00".
platformstringSistema operativo del dispositivo. Ej: "iOS", "Android".
trademarkstringMarca del dispositivo. Ej: "Apple", "Samsung".
geoLocationstringUbicación GPS del dispositivo. Como cuando Rappi te pide activar la ubicación. Ej: "4.710989,-74.072092".No
simDeviceIdstringID del SIM del dispositivo. Ej: "02ba0c1e".No
simOperatorstringOperador de telefonía. Ej: "Movistar", "Claro".No
serialDevicestringNúmero serial del dispositivo. Ej: "01bb90c1d".No
simCellNumberstringNúmero de celular de la SIM. Ej: "3123456789".No
simSerialNumberstringNúmero serial de la SIM. Ej: "02ba0c1e".No
userAgentStringstringInformación del navegador o app. Se genera automáticamente. Ej: "Mozilla/5.0 (iPhone...)".No
versionPlatformstringVersión del sistema operativo. Ej: "13".No
modelstringModelo del dispositivo. Ej: "iPhone 15".No

Ejemplo de petición

JSON — Body
{
  "channel"          : "REDESALIADAS",
  "sourceService"    : "PEX",
  "user"             : "jcano",
  "identification"   : "1144134800",
  "typeIdentification": "CC",
  "ip"               : "192.168.0.1",
  "purpose"          : "Source",
  "uuid"             : "a1b2c3d4e5f67890",
  "mac"              : "08:BD:01:00:00:00",
  "platform"         : "iOS",
  "trademark"        : "Apple",
  "model"            : "iPhone 15",
  "geoLocation"      : "4.710989,-74.072092",
  "versionPlatform"  : "13"
}

Respuestas

CódigoDescripción
200Llave encontrada. Retorna los datos del titular y su cuenta vinculada.
400Datos inválidos. Algún campo está mal escrito o le falta información.
404Llave no encontrada. El cliente no tiene llave registrada en el sistema.
Integración BReB

Registrar llave de cliente

Crea una nueva llave para un cliente — puede ser su correo, celular o cédula — y la vincula a su cuenta bancaria. Es como inscribirse a Nequi por primera vez: das tu número de celular y lo atan a tu cuenta.

¿Cuándo usarlo? La primera vez que un cliente quiere recibir transferencias usando su correo, celular o cédula como identificador.

POST {BASE_URL}/breb/register-key

Parámetros

CampoTipoDescripciónReq.
channelstringCanal de la operación. Ej: "MOVIL".
sourceServicestringServicio origen. Ej: "MEX".
identificationstringNúmero de cédula del cliente. Ej: "80009330".
typeIdentificationstringTipo de documento. "CC" para cédula.
numberAccountstringNúmero de cuenta bancaria que se vincula a la llave. Ej: "862000034".
processKeyCustomerstringTipo de proceso. Para registrar nuevo usar "NEWR".
typeKeyCustomerstringTipo de llave: "E" = email, "P" = phone (celular), "NRIC" = cédula.
valueKeyCustomerstringEl valor de la llave — el correo, el celular o la cédula. Ej: "rolozadag@gmail.com".
typeAccountstringTipo de cuenta: "AH" = ahorros, "CC" = corriente.
subTypeAccountstringSubtipo de cuenta. Ej: "DE" para depósito electrónico.
receptorNodestringNodo receptor en la red ACH. Ej: "VIS".
sourceTypeAccountDescriptionstringDescripción del tipo de cuenta. Ej: "Ahorros a la Vista".
businessNamestringNombre del negocio o empresa. Ej: "Cliente Test Nuevo".
firstNamestringPrimer nombre del cliente. Ej: "RENE".
surNamestringPrimer apellido del cliente. Ej: "LOZADA".
secondSurNamestringSegundo apellido. Si no tiene, enviar "null".No
userstringOperador que realiza el registro. Ej: "rene".

Ejemplo de petición

JSON — Body
{
  "channel"                      : "MOVIL",
  "sourceService"                : "MEX",
  "identification"               : "80009330",
  "typeIdentification"           : "CC",
  "numberAccount"                : "862000034",
  "processKeyCustomer"           : "NEWR",
  "typeKeyCustomer"              : "E",
  "valueKeyCustomer"             : "rolozadag@gmail.com",
  "typeAccount"                  : "AH",
  "subTypeAccount"               : "DE",
  "receptorNode"                 : "VIS",
  "sourceTypeAccountDescription": "Ahorros a la Vista",
  "businessName"                 : "Cliente Test Nuevo",
  "firstName"                    : "RENE",
  "surName"                      : "LOZADA",
  "secondSurName"                : "null",
  "user"                         : "rene"
}

Respuestas

CódigoDescripción
201Llave creada exitosamente. El cliente ya puede recibir transferencias con su correo/celular/cédula.
400Datos inválidos. Revisa los campos obligatorios.
409La llave ya existe. Este correo o celular ya está registrado — no se puede duplicar.
Integración BReB

Actualizar llave de cliente

Modifica los datos de una llave que ya existe. Por ejemplo, si el cliente cambió de correo o quiere actualizar el nombre. Es como editar un contacto guardado en el celular.

PUT {BASE_URL}/breb/update-key

Necesitas el idKeyCustomer (el ID único de la llave). Lo obtienes del resultado de Consultar llave.

Parámetros clave

CampoTipoDescripciónReq.
idKeyCustomerstringID único de la llave a modificar. Es como el número de turno de esa llave. Ej: "416da151-51e9-4bd6-8c13-4f244f3648d9".
processKeyCustomerstringPara actualizar usar "AMND".
typeKeyCustomerstringTipo de llave: "E" = email, "P" = celular, "NRIC" = cédula.
valueKeyCustomerstringNuevo valor de la llave. Ej: "rolozadag@gmail.com".
firstName / surNamestringNombre actualizado del cliente.
identification / numberAccountstringCédula y número de cuenta del cliente.
channel / sourceService / userstringDatos del canal y operador (igual que en los demás endpoints).

Ejemplo de petición

JSON — Body
{
  "channel"                      : "MOVIL",
  "processKeyCustomer"           : "AMND",
  "typeKeyCustomer"              : "E",
  "valueKeyCustomer"             : "rolozadag@gmail.com",
  "idKeyCustomer"                : "416da151-51e9-4bd6-8c13-4f244f3648d9",
  "receptorNode"                 : "VIS",
  "sourceTypeAccountDescription": "Ahorros a la Vista",
  "businessName"                 : "Integración BReB",
  "firstName"                    : "RENEE",
  "surName"                      : "LOZADA",
  "sourceService"                : "MEX",
  "identification"               : "80009330",
  "typeIdentification"           : "CC",
  "numberAccount"                : "862000034",
  "typeAccount"                  : "AH",
  "subTypeAccount"               : "DE",
  "user"                         : "jcano"
}

Respuestas

CódigoDescripción
200Llave actualizada exitosamente.
400Datos inválidos.
404Llave no encontrada — el idKeyCustomer no existe.
Integración BReB

Eliminar llave de cliente

Desvincula y elimina la llave de un cliente. Después de esto, esa llave ya no se puede usar para recibir transferencias. Es como borrar un número de cuenta de tus favoritos en la app del banco.

DELETE {BASE_URL}/breb/delete-key

Esta acción no se puede deshacer. Asegúrate de tener el idKeyCustomer correcto antes de ejecutarla.

Parámetros

CampoTipoDescripciónReq.
idKeyCustomerstringID único de la llave a eliminar. Ej: "1f66a569-5f23-4ba2-8f7a-53d4c77d2400".
processKeyCustomerstringPara eliminar usar "DEAC".
typeKeyCustomer / valueKeyCustomerstringTipo y valor de la llave a eliminar.
identification / numberAccountstringCédula y cuenta del titular.
firstName / surNamestringNombre del titular.
receptorNode / sourceService / channel / user / ipstringDatos del canal y operador (igual al resto de endpoints).

Ejemplo de petición

JSON — Body
{
  "channel"           : "MOVIL",
  "processKeyCustomer": "DEAC",
  "typeKeyCustomer"   : "E",
  "valueKeyCustomer"  : "rolozadag@gmail.com",
  "idKeyCustomer"     : "1f66a569-5f23-4ba2-8f7a-53d4c77d2400",
  "receptorNode"      : "VIS",
  "sourceTypeAccountDescription": "Ahorros a la Vista",
  "businessName"      : "Integración BReB",
  "firstName"         : "Brayan",
  "surName"           : "Marin",
  "sourceService"     : "MEX",
  "identification"    : "80009330",
  "typeIdentification": "CC",
  "numberAccount"     : "862000034",
  "typeAccount"       : "AH",
  "subTypeAccount"    : "DE",
  "ip"                : "192.168.0.1",
  "user"              : "jcano"
}

Respuestas

CódigoDescripción
200Llave eliminada exitosamente.
400Datos inválidos.
404Llave no encontrada.
Integración BReB

Consultar destinatario (GetTarget)

Busca a quién le vas a enviar la plata usando su llave (correo, celular o cédula). Cuando envías la información del monto y cuenta origen, el sistema prepara la transacción y te devuelve un transactionId — guárdalo porque lo necesitas en el siguiente paso.

Si envías amount, sourceIdentification y sourceAccount junto con los datos del destinatario, este endpoint también prepara la transacción y retorna el transactionId listo para ejecutar.

POST {BASE_URL}/breb/get-target

Parámetros

CampoTipoDescripciónReq.
channelstringCanal. Ej: "WEB".
sourceServicestringServicio origen. Ej: "PEX".
entitystringCódigo de la entidad bancaria del destinatario. Obligatorio y debe enviarse desde el frontend. Ej: "EB000001".
userstringOperador. Ej: "jcano".
typeKeyCustomerstringTipo de llave del destinatario: "E" = email, "P" = celular, "NRIC" = cédula.
valueKeyCustomerstringValor de la llave del destinatario. Ej: "deison_ac@hotmail.com".
ipstringIP del dispositivo. Ej: "192.168.0.1".
amountstringMonto a transferir. Si se envía, también prepara la transacción. Ej: "1.02".No*
sourceIdentificationstringCédula de quien envía el dinero. Ej: "1051287968".No*
sourceAccountstringNúmero de cuenta de quien envía. Ej: "852000002".No*
uuid / mac / trademark / model / platform / serialDevice / simDeviceId / simCellNumber / simOperator / simSerialNumber / versionPlatform / geoLocation / userAgentStringstringDatos del dispositivo (igual que en get-key).No

* Si envías uno de los tres (amount, sourceIdentification, sourceAccount), debes enviar los tres juntos.

Ejemplo de petición

JSON — Body
{
  "channel"           : "WEB",
  "sourceService"     : "PEX",
  "entity"            : "EB000001",
  "user"              : "jcano",
  "typeKeyCustomer"   : "E",
  "valueKeyCustomer"  : "deison_ac@hotmail.com",
  "ip"                : "192.168.0.1",
  "amount"            : "1.02",
  "sourceIdentification": "1051287968",
  "sourceAccount"     : "852000002",
  "geoLocation"       : "4.710989,-74.072092"
}

Respuestas

CódigoDescripción
200Destinatario encontrado. Si se envió monto, retorna transactionId para usar en el siguiente paso.
400Datos inválidos.
404Destinatario no encontrado — esa llave no existe en el sistema.
Integración BReB

Realizar Transferencia

Ejecuta la transferencia de dinero entre dos cuentas. Es el paso final donde el dinero realmente se mueve. Necesitas tener listo el targetResolutionId que obtuviste en Consultar destinatario.

El targetResolutionId es único por transacción y expira. Úsalo inmediatamente después de obtenerlo en get-target.

POST {BASE_URL}/breb/transaction

Parámetros — Origen (quien envía)

CampoTipoDescripciónReq.
channel / sourceService / user / ipstringDatos del canal y operador.
amountstringMonto a transferir. Ej: "1000000".
referencestringDescripción o referencia del pago. Ej: "Pago de referencia".
sourceIdentificationstringCédula de quien envía. Ej: "11281434".
sourceTypeIdentificationstringTipo de doc de quien envía. Ej: "CC".
sourceFirstName / sourceSurNamestringNombre y apellido de quien envía.
sourceEntitystringCódigo del banco de quien envía. Ej: "EB000001".
sourceNumberAccountstringNúmero de cuenta de quien envía. Ej: "862000159".
sourceTypeAccount / sourceSubTypeAccountstringTipo y subtipo de cuenta origen. Ej: "AH", "DE".

Parámetros — Destino (quien recibe)

CampoTipoDescripciónReq.
targetResolutionIdstring★ Clave. ID obtenido en get-target. Ej: "373988e9-490c-48d6-aa12-a06b92e184af".
targetValueKeyCustomerstringLlave del destinatario. Ej: "80009330".
targetTypeKeyCustomerstringTipo de llave del destinatario. Ej: "NRIC".
targetEntitystringCódigo del banco destino. Ej: "00000022".
targetNumberAccountstringNúmero de cuenta destino. Ej: "862000034".
targetTypeAccount / targetSubTypeAccountstringTipo y subtipo de cuenta destino.
targetIdentification / targetTypeIdentificationstringCédula y tipo de doc del destinatario.
targetFirstName / targetSurNamestringNombre y apellido del destinatario.
targetNodestringNodo de la red ACH del destinatario. Ej: "NODE001".
geoLocation / uuid / mac / trademark / model / platform / serialDevice / simDeviceId / simCellNumber / simOperator / simSerialNumber / versionPlatform / userAgentStringstringDatos del dispositivo para seguridad y auditoría.No

Ejemplo de petición

JSON — Body
{
  "channel"              : "MOVIL",
  "sourceService"        : "MEX",
  "user"                 : "jcano",
  "ip"                   : "192.168.0.1",
  "reference"            : "Pago de referencia",
  "amount"               : "1000000",
  "sourceIdentification" : "11281434",
  "sourceTypeIdentification": "CC",
  "sourceFirstName"      : "DEISON ANDREI",
  "sourceSurName"        : "BUITRAGO",
  "sourceEntity"         : "EB000001",
  "sourceNumberAccount"  : "862000159",
  "sourceTypeAccount"    : "AH",
  "sourceSubTypeAccount" : "DE",
  "targetResolutionId"   : "373988e9-490c-48d6-aa12-a06b92e184af",
  "targetValueKeyCustomer": "80009330",
  "targetTypeKeyCustomer": "NRIC",
  "targetEntity"         : "00000022",
  "targetNumberAccount"  : "862000034",
  "targetTypeAccount"    : "AH",
  "targetSubTypeAccount" : "DE",
  "targetNode"           : "NODE001",
  "targetIdentification" : "80009330",
  "targetTypeIdentification": "CC",
  "targetFirstName"      : "RENE",
  "targetSurName"        : "LOZADA"
}

Respuestas

CódigoDescripción
200Transacción realizada. El dinero está en camino y recibirás un paymentId para seguimiento.
400Datos inválidos. Revisa que todos los campos obligatorios estén correctos.
404Cuenta o llave no encontrada. El targetResolutionId expiró o la cuenta no existe.
500Error en la transacción. Problema interno — guarda el error y contacta soporte.
Integración BReB

Consultar pago específico

Verifica el estado de una transferencia que ya realizaste usando su paymentId. Es como rastrear un paquete de Rappi: le das el número de pedido y te dice en qué estado va.

POST {BASE_URL}/breb/query-payment

Parámetros

CampoTipoDescripciónReq.
paymentIdstringID único del pago, obtenido al hacer la transacción. Ej: "6bd54b39-c876-4295-9b58-c2735147ece8".
initialDatestringFecha de inicio de la búsqueda, formato YYYYMMDD. Ej: "20250804".
finalDatestringFecha fin de la búsqueda, formato YYYYMMDD. Ej: "20250804".
initialHourstringHora de inicio, formato HHmmss. Ej: "081700" = 8:17:00 AM.
finalHourstringHora fin, formato HHmmss. Ej: "235900" = 11:59 PM.
JSON — Body
{
  "paymentId"  : "6bd54b39-c876-4295-9b58-c2735147ece8",
  "initialDate": "20250804",
  "finalDate"  : "20250804",
  "initialHour": "081700",
  "finalHour"  : "235900"
}

Respuestas

CódigoDescripción
200Información del pago obtenida. Estado, monto, fecha y partes involucradas.
400Datos inválidos. Verifica el formato de fechas y horas.
404Pago no encontrado. El paymentId no existe o está fuera del rango de fechas.
Integración BReB

Historial de pagos de un cliente

Consulta todos los pagos que ha realizado un cliente en un rango de fechas y horas. Es como pedir el extracto bancario de los últimos días, pero filtrado por el sistema BReB.

POST {BASE_URL}/breb/query-payment-history

Parámetros

CampoTipoDescripciónReq.
identificationstringCédula del cliente cuyo historial quieres consultar. Ej: "1193127269".
typeIdentificationstringTipo de documento. Ej: "CC".
initialDate / finalDatestringRango de fechas formato YYYYMMDD. Ej: "20250804".
initialHour / finalHourstringRango de horas formato HHmmss. Ej: "000000" / "235959".
JSON — Body
{
  "identification"    : "1193127269",
  "typeIdentification": "CC",
  "initialDate"       : "20250804",
  "finalDate"         : "20250804",
  "initialHour"       : "000000",
  "finalHour"         : "235959"
}

Respuestas

CódigoDescripción
200Historial obtenido. Lista de todas las transferencias del cliente en ese período.
400Datos inválidos.
404No se encontraron pagos en ese rango de fechas para ese cliente.