Requisitos previos
Antes de configurar los webhooks, confirma que tienes:
- El Plugin Pix Indirecto configurado y en ejecución (consulta Cómo funciona la participación indirecta)
- Un endpoint HTTPS listo para recibir solicitudes de webhook
- Conocimiento básico del ciclo de vida de los eventos Pix y de los flujos de transacciones
Qué te dan los webhooks
Los webhooks no son opcionales en las operaciones de Pix Indirecto. Pix es un sistema asíncrono y multipartito. Una solicitud de API puede tener éxito antes de que la transacción llegue a su estado final. El sistema confirma ese estado después, tras la liquidación y la confirmación de la contraparte. Los webhooks permiten que tu sistema:
- Sigue el estado autoritativo de las transacciones
- Reacciona a devoluciones, reversiones y eventos de MED
- Mantén la consistencia del ledger y la operativa
- Reduzca el polling y la carga operativa
Tipos de eventos
Recibes eventos agrupados por flujo y entidad, alineados con los dominios de BACEN (Banco Central do Brasil).
Cada evento refleja una transición de estado en el ecosistema Pix. Trata cada evento como la fuente de verdad.
Las dos entidades de MED 2.0 se comportan de forma distinta. El plugin emite
FUNDS_RECOVERY después de actualizar su registro local. FUNDS_RECOVERY_EVENTS es de paso: lleva los eventos de ciclo de vida de BTG sin actualización en la base de datos. Consulta MED 2.0: Recuperación de fondos para el flujo completo.DICT (Diretório de Identificadores de Contas Transacionais) es el directorio de BACEN que gestiona las claves Pix y las operaciones relacionadas, como reclamaciones, infracciones y devoluciones.
Configuración de webhooks
Para habilitar los webhooks, configura las URLs de destino y selecciona qué tipos de evento recibe tu sistema.
Variables de entorno
Puedes configurar los endpoints de webhook en el nivel de entidad, de flujo o global.
Las otras entidades siguen el mismo patrón, por ejemplo
WEBHOOK_DICT_FUNDS_RECOVERY_EVENTS_URL o WEBHOOK_SCHEDULE_CASHOUT_URL.
Cada flujo también tiene una URL en el nivel de flujo para todas sus entidades, WEBHOOK_<FLOW>_URL. El plugin la usa cuando no existe una URL en el nivel de entidad, por ejemplo WEBHOOK_DICT_URL o WEBHOOK_TRANSFER_URL.
Prioridad de resolución de URL
Cuando configuras varias URLs, el plugin las resuelve en este orden:
-
URL en el nivel de entidad
Ejemplo:
WEBHOOK_DICT_CLAIM_URL -
URL en el nivel de flujo
Ejemplo:
WEBHOOK_DICT_URL -
URL predeterminada
WEBHOOK_DEFAULT_URL
Formato de la solicitud
Headers
Cada solicitud de webhook incluye headers estandarizados para la trazabilidad.
Estructura del cuerpo
El esquema del payload varía según el tipo de evento, pero siempre representa un cambio de estado.
Respuestas y comportamiento de reintento
Respuesta esperada
Tu endpoint debe devolver un estado HTTP 2xx para confirmar la entrega exitosa.
Estrategia de reintentos
El plugin reintenta automáticamente las entregas fallidas con backoff exponencial (multiplicador predeterminado
2):
Valores predeterminados
- Máximo de intentos: 10
- Timeout por solicitud: 10 segundos (
WEBHOOK_WORKER_TIMEOUT)
GET /v1/webhooks/outbound y POST /v1/webhooks/outbound/{id}/retry.
Backoff personalizado
Puedes cambiar el multiplicador de backoff por entidad:Protección con circuit breaker
Un circuit breaker protege la entrega de webhooks y evita fallas en cascada. Cuando el Plugin Pix detecta fallas repetidas de entrega (de forma predeterminada, 5 respuestas
5xx o errores de conexión consecutivos), pausa temporalmente las llamadas de webhook para ese flujo y esa entidad.
Después de un período de espera configurable (30 segundos de forma predeterminada), el sistema reintenta el endpoint para verificar si se recuperó.
Cuando el endpoint devuelve respuestas exitosas, el plugin reanuda la entrega normal automáticamente.
El circuit breaker funciona junto con los reintentos y el backoff exponencial.
Consultar y reintentar webhooks
El plugin guarda los webhooks que recibe de BTG (entrantes) y los webhooks que te envía (salientes). Usa estos endpoints para encontrar un webhook y procesarlo o enviarlo de nuevo:
Errores de transporte y eventos huérfanos
Cuando el plugin recibe una solicitud de devolución de MED, busca la transferencia original a lo largo de la cadena cash-in → cash-out. Si ninguna fuente local coincide, el plugin persiste la devolución como un registro huérfano para la auditabilidad ante BACEN. No descarta la devolución, por lo que el registro queda visible para la conciliación y el seguimiento. Si una consulta de fuente falla en la capa de transporte, el plugin omite esa fuente y continúa. Cuando ninguna fuente se resuelve, el plugin registra la devolución como huérfana.
originalEndToEndId es la clave canónica para todas las consultas de devoluciones. El plugin resuelve las devoluciones con este campo en ambos sentidos, cash-in → devolución y cash-out → devolución. Indexa siempre las devoluciones por originalEndToEndId (el ID end-to-end de la transferencia original), no por una única ruta de consulta específica de un sentido.
Informes de transacciones internas (intra-PSP)
El plugin liquida internamente las transferencias intra-PSP (P2P). Nunca llegan a BTG para su liquidación, pero el plugin igual las informa a BACEN mediante la abstracción TRCK002. BTG confirma el estado del informe mediante un webhook CAMT025 que lleva la entidad
PixInternalTransactionsReport.
El plugin actualiza el estado del informe cuando el webhook de informe CAMT025 confirma o falla. Los webhooks salientes se disparan antes, cuando la transferencia intra-PSP se liquida:
TRANSFER / CASHIN para el tramo de cash-in y TRANSFER / CASHOUT para el tramo de cash-out. Para el flujo interno completo, consulta Transferencias intra-PSP.
Para listar los informes de transacciones, usa GET /v1/transaction-reports. Si el worker no envió un informe, envíalo con POST /v1/transaction-reports/{id}/submit. El plugin no cambia un informe que ya está en PROCESSING o CONFIRMED. El webhook CAMT025 entrega el resultado.
Informes de tiempos de transacción (TemposTransacoes)
El plugin calcula los percentiles de experiencia del pagador de TemposTransacoes de BACEN para un mes de referencia cerrado. Para iniciar el cálculo, envía
POST /v1/statistics/tempos-transacoes/jobs con el referenceMonth en formato YYYY-MM. El job empieza en PENDING, pasa a RUNNING y termina en COMPLETED o FAILED. Un mes de referencia puede tener un job PENDING o RUNNING a la vez.
Para leer el job de un mes, usa GET /v1/statistics/tempos-transacoes/jobs/{referenceMonth}. Cuando el estado es COMPLETED, el campo result trae los percentiles. El plugin también envía un webhook REPORT / TEMPOSTRANSACOES con el resultado cuando el job se completa.
Mejores prácticas
Ejemplos de eventos
Expande cada entrada para ver un payload de ejemplo de ese tipo de evento. Cada ejemplo muestra los campos principales. Un payload puede traer más.
Reclamación DICT
Reclamación DICT
Eventos de ciclo de vida de titularidad o portabilidad. Úsalos para seguir las disputas de claves Pix entre instituciones.
Informe de infracción DICT (MED)
Informe de infracción DICT (MED)
Eventos de señalización de disputas y de fraude alineados con las reglas de MED de BACEN.
Devolución DICT (MED)
Devolución DICT (MED)
Solicitudes de devolución y decisiones relacionadas con los casos de MED.
Recuperación de fondos DICT (MED 2.0)
Recuperación de fondos DICT (MED 2.0)
Cambios de estado de la entidad de recuperación de fondos. El plugin actualiza su registro local antes de enviar el evento.Los eventos de ciclo de vida llegan como
entityType: FUNDS_RECOVERY_EVENTS (de paso, sin actualización en la BD), con valores de payload.body.event como FUNDS_RECOVERY_ANALYSED y FUNDS_RECOVERY_COMPLETED.Cash-in y cash-out de transferencia
Cash-in y cash-out de transferencia
Eventos de transferencias Pix entrantes y salientes.Cash-in (transferencia entrante):Cash-out (transferencia saliente):
Cash-in y cash-out de devolución
Cash-in y cash-out de devolución
Eventos de liquidación de devoluciones de transacciones Pix.Cash-in de devolución (recibir una devolución):Cash-out de devolución (enviar una devolución):
Próximos pasos
- Dominios principales de Pix: transferencias: Las operaciones de transferencia en detalle
- Dominios principales de Pix: DICT: Entender las operaciones de DICT y la gestión de claves
- Dominios principales de Pix: MED: Manejo de disputas y devoluciones de MED
- MED 2.0: Recuperación de fondos: Recuperación de fraude entre cuentas y sus webhooks
- Transferencias intra-PSP: Liquidación P2P interna e informes TRCK002
- Referencia de API: Documentación completa de la API para las operaciones de DICT, reclamaciones, transacciones, códigos QR y MED

