Documentación para desarrolladores

Construye con
PaymentsWay

Todo lo que necesitas para integrar pagos en tu plataforma. APIs, Webhooks, SDKs 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 o Magento sin escribir código.
Soporte técnico Nuestro equipo responde en menos de 24h
Colección Postman Prueba todos los endpoints sin escribir código
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

Genera links de pago desde la consola o vía API y compártelos por cualquier canal: email, WhatsApp, SMS o redes sociales.

Links masivos

Genera links para múltiples clientes a la vez cargando una plantilla de Excel. Ideal para facturación por lotes o cobros periódicos.

Link individual

Crea un link para un cliente específico con sus datos prellenados o genérico sin datos. Dispones de tres acciones sobre el link generado:

  • Ver — Abre el checkout en el navegador.
  • Copiar — Copia el link recortado al portapapeles.
  • Compartir — Envía por SMS 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 el cliente seleccione el monto antes de pagar.

Web Checkout

Botón de Pago

Un formulario HTML que redirige al cliente al checkout de PaymentsWay con los datos de la compra precargados.

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

Permite que el cliente seleccione o ingrese el monto que desea pagar, dentro de un rango mínimo/máximo que defines tú.

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 permite aceptar pagos directamente en tu sitio sin redirecciones. Solo necesitas incluir 3 bloques de código.

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

Experiencia del cliente al interactuar con el widget de pagos.

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 embebibles con branding personalizado que puedes insertar en cualquier página web autorizada.

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

Integra PaymentsWay en tu tienda WooCommerce en menos de 10 minutos sin tocar código.

⬇ Descargar Plugin

Monedas soportadas: COP, USD, EUR. Configura la misma moneda en WooCommerce.

Instalación

  1. Ve a WordPress → Plugins → Añadir nuevo → Subir plugin, selecciona el .zip e instala.
  2. Activa el plugin y ve a WooCommerce → Ajustes → Pagos.
  3. Activa PaymentsWay y haz clic en Configurar.
  4. Completa: ID MERCHANT, ID TERMINAL, ID BOTÓN DE PAGO, APIKEY.
  5. Copia la URL de tu página de tienda y pégala en el campo URL de retorno.
  6. Guarda los cambios.
Plugins

PrestaShop

Módulo nativo de PaymentsWay para PrestaShop con configuración visual sin código.

⬇ Descargar Plugin

Paso 1 — Instalación

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

Paso 2 — Configuración

  1. Localiza PaymentsWay en el listado y haz clic en Configurar.
  2. Ingresa tus credenciales (merchant_id, terminal_id, form_id, apikey).
  3. Guarda los cambios.

Paso 3 — Preferencias

  1. Ve a Pagos → Preferencias.
  2. Configura restricciones por moneda, grupos y países según tu operación.
  3. Guarda los cambios.
Plugins

Magento

Extensión de PaymentsWay para Magento 2 instalable vía cPanel o Composer.

⬇ Descargar Plugin

Instalación

  1. Accede a cPanel y abre el Administrador de archivos.
  2. Navega a la carpeta raíz de Magento y luego a app/.
  3. Sube el .zip y descomprímelo. Se creará la carpeta code/.

Configuración

  1. Accede al panel de administración de Magento.
  2. Ve a Stores → Configuration → Sales → Payments Way Configuration.
  3. Agrega tus datos: terminal, formulario, merchant, apikey y response URL.
  4. Guarda y limpia el caché.
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

Este endpoint solo está disponible para usuarios con certificación PCI y DSS.

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

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

Estados del sistema

IDNombreDescripción
1CreadaTransacción creada, pendiente de proceso.
34ExitosaPago aprobado y acreditado.
35PendienteEn proceso de validación.
36FallidaTransacción rechazada por el banco o pasarela.
38CanceladaTransacción cancelada por el usuario o sistema.
39ReembolsadaPago devuelto al cliente.
40Pendiente efectivoVoucher generado, en espera de pago en punto físico.

Ejemplo de petición

JavaScript
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');
});
PayOuts

PayOuts

Servicio de dispersión de fondos. Permite enviar dinero a múltiples cuentas bancarias desde tu saldo en PaymentsWay.

Documentación

🇺🇸
English
Postman collection in English
🇨🇴
Español
Colección Postman en español
BReB — QR

BReB — QR

BReB (Botón de Recaudo Bancario) es el estándar de pagos inmediatos mediante código QR, iniciativa del Banco de la República de Colombia. PaymentsWay lo implementa a través de la infraestructura de VePay. Permite recibir pagos desde cualquier app bancaria habilitada.

🔑
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 de pago con 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 Red de pagos 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) Red de pagos 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.
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 dinámico o estático. 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. Siempre "01".
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 string del QR 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

Esta API permite hacer transferencias de dinero entre cuentas bancarias a través del sistema 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.

¿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.
📊
Reportes
Genera y programa reportes automáticos de transacciones.

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 — 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}/breb

La URL base del entorno (producción / sandbox) es entregada por PaymentsWay al activar la 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 de la red de pagos. 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"                 : "PaymentsWay",
  "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"      : "PaymentsWay",
  "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 destino en la red de pagos. 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.
Integración BReB

Reportes

El módulo de reportes permite generar, programar y enviar automáticamente informes de transacciones BReB. Ideal para conciliación contable, auditoría y control de movimientos.

Endpoints disponibles

MétodoEndpointDescripción
GET/reports/generate-and-sendGenera el reporte y lo envía automáticamente a los destinatarios configurados.
GET/reports/generateGenera el reporte sin enviarlo.
GET/reports/transactionsLista todas las transacciones disponibles para reportar.
GET/reports/generate-by-schedule/{scheduleId}Genera un reporte de un programa específico en un rango de fechas (startDate, endDate).
GET/reports/schedulesLista todos los programas de reportes configurados.
POST/reports/schedulesCrea un nuevo programa de reporte.
GET/reports/schedules/{id}Consulta un programa de reporte específico por su ID.
PUT/reports/schedules/{id}Actualiza un programa de reporte existente.
DEL/reports/schedules/{id}Elimina un programa de reporte.
GET/reports/recipientsLista todos los destinatarios configurados para recibir reportes.
POST/reports/recipientsAgrega un nuevo destinatario de reportes.
GET/reports/recipients/{id}Consulta un destinatario específico.
PUT/reports/recipients/{id}Actualiza un destinatario existente.
DEL/reports/recipients/{id}Elimina un destinatario.
GET/reports/schedules/{scheduleId}/recipientsLista todos los destinatarios de un programa de reporte específico.

Los endpoints de reportes no requieren body por el momento — la configuración detallada de CreateReportScheduleDto y CreateReportRecipientDto se define en el contrato interno del proyecto. Contacta al equipo técnico de PaymentsWay para los schemas completos.

Flujo típico de reportes

  1. Crea los destinatarios que recibirán los reportes (POST /reports/recipients).
  2. Crea un programa de reporte con la frecuencia y configuración deseada (POST /reports/schedules).
  3. Vincula los destinatarios al programa generado.
  4. Genera el reporte manualmente cuando necesites (GET /reports/generate-and-send) o espera la ejecución automática según el programa.