Requisitos previos
Antes de comenzar, asegúrate de tener:
- Tu ISPB (Identificador do Sistema de Pagamentos Brasileiro) — el identificador de 8 dígitos derivado del CNPJ de tu institución
- Acceso a tus instancias de Midaz y CRM (desplegadas y en ejecución)
- Acceso a los servicios del proveedor BTG (BTG proporciona las credenciales)
PIX_ISPB también se usa para detectar transferencias intra-PSP (P2P): cuando el ISPB de destino de una transferencia coincide con este valor, el plugin la liquida internamente en lugar de enrutarla a BTG, sin dejar de reportarla a BACEN. Consulta Transferencias intra-PSP.1. Licencia
El plugin es una solución empresarial y requiere una licencia válida para operar. Lerian proporciona la clave de licencia durante el onboarding.
2. Access Manager (opcional)
Access Manager gestiona la autenticación del plugin. Cuando está habilitado, valida todas las solicitudes entrantes antes de que lleguen a la API del plugin.
PLUGIN_AUTH_ENABLED=true, el plugin valida el encabezado Authorization de cada solicitud para asegurar que:
- El token pertenece a un usuario o aplicación autorizados
- El token otorga acceso al endpoint y método de API solicitados
Solo necesitas proporcionar credenciales de cliente (
CLIENT_ID / CLIENT_SECRET) para los servicios de Midaz, CRM y Fee si esos servicios también tienen habilitada la autenticación con Access Manager.3. Midaz
Midaz es el libro mayor central de todas las transacciones Pix que procesa el plugin. El plugin registra cada operación de cash-in, cash-out y reembolso en Midaz como una transacción de partida doble.
Conexión
Requisitos de activos
Configura un activo en tu organización y libro mayor con estas propiedades:
| Propiedad | Valor |
|---|---|
| Type | currency |
| Code | BRL |
BRL. El plugin rechaza las operaciones sobre cuentas que no coincidan con esta configuración.
Configuración de cuentas
Antes de usar el plugin, crea una cuenta en Midaz para cada cliente bajo tu ISPB. Usa el endpoint Create an Account para configurar las cuentas. Cada cuenta debe:
- Pertenecer a la organización y al libro mayor que configuraste
- Usar el activo
BRL
Encabezado X-Account-Id
Muchas operaciones de Pix requieren el encabezado
X-Account-Id para identificar qué cuenta realiza la acción. Este ID corresponde al ID de la cuenta del libro mayor de Midaz.
Cuando llamas a un endpoint del plugin, el valor de X-Account-Id le indica al plugin:
- Qué cuenta usar para las operaciones del libro mayor
- Qué datos del cliente obtener del CRM
- Qué saldo validar y actualizar
Cómo usa el plugin el ID de cuenta
El plugin usa el ID de cuenta de manera diferente según el tipo de operación:| Tipo de flujo | Cómo usa el plugin el ID de cuenta |
|---|---|
| No transaccional (p. ej., crear claves o códigos QR) | Obtiene los datos del cliente y de la cuenta bancaria desde el CRM |
| Transaccional (p. ej., pagos, reembolsos) | Obtiene los datos del cliente para la iniciación del pago |
| Valida los datos de la cuenta para la autorización de pagos entrantes | |
| Ejecuta la transacción en el libro mayor |
Cumplimiento de cuentas
El plugin no aplica restricciones de cuenta a nivel de negocio, como cuentas bloqueadas o suspendidas. Tu aplicación es responsable de validar el estado de la cuenta antes de llamar al plugin. Para impedir las liquidaciones Pix en una cuenta específica, bloquéala directamente en Midaz. El plugin recibe un rechazo cuando intenta registrar la transacción. Documentación relacionada:
4. CRM
El CRM almacena la información del cliente (titular) y sus cuentas bancarias asociadas. Cada cuenta de Midaz debe tener un titular y una cuenta alias correspondientes en el CRM para realizar operaciones de Pix. El plugin consulta los datos del CRM para:
- Registrar y validar claves Pix
- Construir los mensajes de pago para BACEN
- Autorizar transacciones entrantes
- Procesar los flujos de reembolso y disputa
Conexión
Titulares
Los datos del titular representan al cliente que es dueño de la cuenta. Crea cada titular en el CRM antes de ejecutar cualquier operación de Pix para ese cliente.
Campos obligatorios
| Campo | Requisito | Ejemplo |
|---|---|---|
name | Máximo 120 caracteres | Maria Silva Santos |
document | Para NATURAL_PERSON, un CPF con 11 dígitos; para LEGAL_PERSON, un CNPJ con 14 dígitos (solo números) | 12345678900 |
type | Tipo de persona (valores enum del CRM) | NATURAL_PERSON |
Campos opcionales
| Campo | Cuándo usarlo |
|---|---|
legalPerson.tradeName | Al asociar un nombre comercial con los datos de la clave |
addresses.primary | Obligatorio para la creación de cobros con fecha de vencimiento |
Cuentas alias
Las cuentas alias vinculan una cuenta de Midaz con sus datos bancarios. Cada cuenta alias debe incluir la información bancaria que el ecosistema Pix requiere para el procesamiento de transacciones.
Campos obligatorios
| Campo | Requisito | Ejemplo |
|---|---|---|
accountId | ID de cuenta de Midaz (UUID) | 3c90c3cc-0d44-4b50-8888-8dd25736052a |
bankingDetails.branch | Exactamente 4 dígitos | 0001 |
bankingDetails.account | De 1 a 20 dígitos | 123456789 |
bankingDetails.type | Tipo de cuenta (ver la tabla a continuación) | CACC |
bankingDetails.openingDate | Formato YYYY-MM-DD | 2024-01-15 |
Tipos de cuenta admitidos
| Código | Descripción |
|---|---|
CACC | Cuenta corriente |
SLRY | Cuenta salario |
SVGS | Cuenta de ahorros |
TRAN | Cuenta transaccional |
5. Proveedor BTG
BTG es el participante directo que conecta tu institución con la infraestructura Pix de BACEN. BTG proporciona las credenciales directamente cuando tu institución se registra para la integración indirecta con BACEN.
Conexión
mTLS (seguridad de webhooks)
El TLS mutuo (mTLS) agrega una capa adicional de seguridad al validar el certificado de BTG en las solicitudes de webhook. Esto garantiza que los webhooks entrantes provengan genuinamente de BTG.
6. Servicio de tarifas (opcional)
Habilita el cálculo de tarifas para cobrar y distribuir automáticamente las tarifas sobre los pagos entrantes. Esto es opcional — si no lo configuras, el plugin procesa las transacciones sin cálculo de tarifas.
Conexión
Cómo funciona
Cuando configuras
CASHIN_FEE_CALCULATION_TYPE=segment, el plugin:
- Recupera el segmento asociado a la cuenta receptora
- Calcula las tarifas aplicables antes de procesar la transacción en Midaz
- Distribuye el pago entrante según las reglas de paquete vinculadas a ese segmento
Pasos de configuración
- Crea segmentos en Midaz — Define los segmentos de cuenta que determinan las reglas de tarifas
- Configura paquetes en Fee Engine — Vincula cada segmento a sus reglas de cálculo de tarifas
- Asigna segmentos a las cuentas — Crea o actualiza las cuentas de Midaz con el ID de segmento adecuado
7. Conciliación de DICT (VSync)
VSync concilia tus datos locales de DICT con BACEN procesando todos los eventos del día relacionados con claves. Esto garantiza que tu estado local se mantenga consistente con los registros autoritativos de BACEN.
El rango CIDR restringe qué redes pueden activar la conciliación. El plugin rechaza automáticamente las solicitudes provenientes de fuera de este rango.
Configuración de la caché de Redis
VSync usa Redis para cachear las entradas de BTG/DICT y los titulares del CRM durante la conciliación. En los despliegues con Helm, el valor por defecto de
REDIS_HOST apunta al sidecar Valkey integrado, por lo que no se requiere configuración adicional para una instalación estándar.
En los despliegues con Helm, el valor por defecto de
REDIS_HOST apunta al sidecar Valkey integrado (<release-name>-valkey:6379) — no se necesita configuración adicional de Redis a menos que te conectes a una instancia externa.Conexión (siempre se usa)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
REDIS_HOST | string (host:port, CSV) | <release>-valkey:6379 (chart de Helm) | Dirección(es) de Redis. El valor por defecto apunta al Valkey integrado (<release-name>-valkey:6379). Múltiples direcciones separadas por coma definen una topología Sentinel/Cluster. |
REDIS_MASTER_NAME | string | "" | Nombre del master de Sentinel. Vacío = standalone (conexión directa). |
REDIS_DB | int | 0 | Número de base de datos lógica de Redis. |
REDIS_PROTOCOL | int | 3 | Versión del protocolo RESP (2 o 3). |
Pool de conexiones y reintentos (siempre se usa)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
REDIS_POOL_SIZE | int | 10 | Cantidad máxima de conexiones en el pool. |
REDIS_MIN_IDLE_CONNS | int | 0 | Cantidad mínima de conexiones inactivas mantenidas listas. |
REDIS_READ_TIMEOUT | int (segundos) | 3 | Timeout de las operaciones de lectura. |
REDIS_WRITE_TIMEOUT | int (segundos) | 3 | Timeout de las operaciones de escritura. |
REDIS_DIAL_TIMEOUT | int (segundos) | 5 | Timeout para establecer la conexión inicial. |
REDIS_POOL_TIMEOUT | int (segundos) | 2 | Timeout de espera por una conexión libre del pool. |
REDIS_MAX_RETRIES | int | 3 | Cantidad máxima de reintentos para un comando fallido. |
REDIS_MIN_RETRY_BACKOFF | int (milisegundos) | 8 | Retraso mínimo entre reintentos. |
REDIS_MAX_RETRY_BACKOFF | int (segundos) | 512 | Retraso máximo entre reintentos. Nota: se almacena en segundos en el código (unidad distinta a la del mínimo). |
Autenticación (opcional — solo se usa si se define)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
REDIS_PASSWORD | string (secreto) | "" | Contraseña de Redis. Vacío = sin autenticación por contraseña. |
TLS (opcional — solo se usa si REDIS_TLS=true)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
REDIS_TLS | bool | false | Habilita TLS. Obligatorio true en DEPLOYMENT_MODE=saas (validado al arrancar). |
REDIS_CA_CERT | string (PEM base64) | "" | Certificado CA (base64) para validar el servidor cuando TLS está activo. |
Autenticación GCP IAM (opcional — solo se usa si REDIS_USE_GCP_IAM=true)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
REDIS_USE_GCP_IAM | bool | false | Habilita la autenticación GCP IAM (Memorystore) en lugar de contraseña. |
REDIS_SERVICE_ACCOUNT | string | "" | Cuenta de servicio de GCP que genera el token de acceso. |
GOOGLE_APPLICATION_CREDENTIALS | string | "" | Ruta de las credenciales de GCP (leída mediante CredentialsBase64FromEnvValue) para generar el token. |
REDIS_TOKEN_LIFETIME | int (minutos) | 60 | Tiempo de vida del token IAM generado. |
REDIS_TOKEN_REFRESH_DURATION | int (minutos) | 45 | Intervalo de renovación del token (debe ser menor que el tiempo de vida). |
TTLs de la caché de VSync (siempre se usa)
| Var | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
CACHE_BTG_ENTRY_TTL | Go duration | 30m | TTL de la caché para las entradas de BTG/DICT en Redis. Un valor negativo revierte al valor por defecto. |
CACHE_CRM_HOLDER_TTL | Go duration | 30m | TTL de la caché para los titulares del CRM en Redis. Un valor negativo revierte al valor por defecto. |
8. Seguridad de webhooks internos
El plugin usa un canal de comunicación interno entre los servicios Worker y Aplicación. Las firmas HMAC-SHA256 aseguran este canal para prevenir manipulaciones y ataques de repetición.
9. Capas de workers
El plugin opera con tres capas de workers, cada una encargada de una parte distinta del ciclo de vida de Pix. Todos los workers se ejecutan como servicios separados junto a la aplicación principal.
Worker entrante
El worker entrante recibe las notificaciones de webhook de BTG y las reenvía a tu aplicación para su procesamiento.
Worker saliente
El worker saliente envía notificaciones de eventos desde el plugin a tu aplicación mediante webhooks. Así es como tu sistema se mantiene informado sobre los eventos de Pix (transferencias, reembolsos, reclamos, disputas).
Prioridad de resolución de URL
El plugin resuelve las URL de webhook en este orden, usando la primera coincidencia:- URL de entidad — Una URL específica del tipo de evento (p. ej.,
WEBHOOK_DICT_CLAIM_URL) - URL de flujo — Una URL para la categoría más amplia (p. ej.,
WEBHOOK_DICT_URL) - URL por defecto — La URL de respaldo (
WEBHOOK_DEFAULT_URL)
Worker de conciliación
El worker de conciliación necesita las mismas credenciales que la capa de Aplicación para estos servicios:
- CRM — URL y credenciales
- BTG — URL y credenciales
- Midaz — ID de organización
Si dejas ambos campos vacíos, el worker se ejecuta sin restricciones de tiempo — 24/7.
Los endpoints de cashout y reembolso de PIX Indirecto admiten idempotencia mediante el encabezado de solicitud
X-Idempotency, con un TTL configurable a través de X-TTL. Para conocer las estrategias de reintento y los detalles de implementación, consulta Reintentos e idempotencia.10. Observabilidad (OpenTelemetry)
El plugin incluye instrumentación completa de OpenTelemetry (trazas, métricas y logs) en las capas de Aplicación y Worker. Cada flujo de Pix se traza de extremo a extremo — transferencias (cash-in y cash-out), reembolsos, webhooks entrantes y salientes, conciliación de DICT y liquidación intra-PSP — para que puedas seguir un único pago a través del plugin y de las llamadas a Midaz, CRM y BTG. La telemetría está desactivada por defecto. Habilítala y apunta el exportador OTLP a tu collector:
Cuando
ENABLE_TELEMETRY=true, OTEL_EXPORTER_OTLP_ENDPOINT es obligatorio. Configura las mismas variables de OTel en la Aplicación y en cada Worker para que las trazas se correlacionen entre los servicios.Exportador: gRPC y TLS
El plugin exporta trazas, métricas y logs mediante OTLP/gRPC. El esquema del endpoint controla la seguridad del transporte:
| Valor del endpoint | Transporte | Seguridad |
|---|---|---|
https://collector:4317 | gRPC sobre TLS | Seguro (recomendado para producción) |
http://collector:4317 | gRPC, texto plano | Inseguro — se infiere automáticamente |
collector:4317 (host:port sin esquema) | gRPC, texto plano | Inseguro — se infiere automáticamente |
Ejemplo: endpoint del collector
Apunta el plugin a cualquier collector compatible con OTLP (el OpenTelemetry Collector, Grafana LGTM/Alloy, etc.) que escuche en el puerto gRPC:
11. Salud y disponibilidad
La Aplicación y los Workers exponen una sonda de disponibilidad en
/readyz (junto a las verificaciones estándar de liveness). Apunta la sonda de disponibilidad de tu orquestador a este endpoint para que el tráfico se enrute solo cuando el servicio y sus dependencias estén listos.
Propósito de la transferencia (MED 2.0)
El endpoint de cashout acepta un encabezado opcional
X-Purpose que identifica el propósito de la transacción, usado para las transferencias de reembolso de MED 2.0. Cuando se omite, su valor por defecto es TRANSFER.
TRANSFER e INSTANT_PAYMENT_REFUND. Consulta MED 2.0 — Recuperación de fondos para más detalles.
Próximos pasos
Con el plugin completamente configurado, estás listo para empezar a operar Pix. Explora estos temas para profundizar:
- Webhooks — Tipos de eventos, payloads, reintentos y mejores prácticas
- MED 2.0 — Recuperación de fondos — Recuperación de fraude entre cuentas y el encabezado X-Purpose
- Operaciones de reembolso — Reembolsos parciales distribuidos y desbloqueo
- Transferencias intra-PSP — Liquidación P2P interna y reporte TRCK002
- Dominios principales: DICT — Comprensión de la gestión de claves Pix
- Dominios principales: transacciones — Flujos y ciclo de vida de las transacciones
- Dominios principales: códigos QR — Generación de códigos QR estáticos y dinámicos
- Referencia de API — Documentación completa de la API para operaciones de DICT, Reclamos, Transacciones, Códigos QR y MED

