Lista completa de eventos de webhook relacionados a infrações MED, com descrições e exemplos de payload.
O MED (Mecanismo Especial de Devolução) é o mecanismo do BACEN para contestação de transações PIX suspeitas de fraude. Quando um pagador contesta uma cobrança paga via PIX, a adquirente abre uma infração e a DiamantePay passa a notificar o merchant sobre cada mudança de status através dos eventos infraction.*.
Assim que uma infração é aberta, o valor contestado é bloqueado (movido para o saldo retido) até que o caso seja resolvido — cancelado, defendido com sucesso ou aceito com devolução ao pagador.
Uma infração percorre os seguintes status, na ordem:
open -> under_defense -> cancelled | defended | acceptedopen: infração recebida da adquirente. O valor contestado é bloqueado (movido do saldo disponível para o saldo retido).under_defense: a adquirente abriu uma análise de defesa. Não há efeito no saldo.under_defense, a infração é resolvida em um dos três desfechos abaixo:
cancelled: infração cancelada. O valor bloqueado é devolvido ao saldo disponível.defended: o relatório da infração foi encerrado com o bloqueio liberado — os fundos retornam ao merchant, sem perda. Isto não é um reembolso.accepted: ocorreu um reembolso real (valor devolvido ao pagador maior que zero). O valor bloqueado/retido é debitado definitivamente do merchant (a perda é absorvida pelo merchant) e a cobrança vinculada passa para o status refunded.Uma infração defended ainda pode transicionar para accepted
posteriormente, caso a adquirente reporte um reembolso real após a liberação
do bloqueio. Nesse caso, o débito é aplicado sobre o saldo disponível (podendo
deixá-lo negativo), já que os fundos já haviam sido devolvidos ao merchant.
cancelled e accepted são status terminais e não recebem novas transições.
| Evento | Descrição |
|---|---|
infraction.opened | Infração recebida, valor contestado bloqueado (movido para o saldo retido) |
infraction.under_defense | Adquirente abriu uma análise de defesa (sem alteração de saldo) |
infraction.cancelled | Infração cancelada, valor bloqueado devolvido ao saldo disponível |
infraction.defended | Relatório encerrado com o bloqueio liberado; fundos retornam ao merchant (sem perda) |
infraction.accepted | Reembolso real ocorreu; valor bloqueado/retido é debitado (perda do merchant) e a cobrança vinculada passa a refunded |
infraction.openedDisparado quando uma infração é recebida da adquirente. O valor contestado (amount) é bloqueado: debitado do saldo disponível e movido para o saldo retido do merchant.
infraction.under_defenseDisparado quando a adquirente abre uma análise de defesa sobre a infração. Não há alteração de saldo neste evento.
infraction.cancelledDisparado quando a infração é cancelada. O valor bloqueado é devolvido ao saldo disponível do merchant. Status terminal.
infraction.defendedDisparado quando o relatório da infração é encerrado com o bloqueio liberado. O valor retido retorna ao saldo disponível do merchant — não houve reembolso ao pagador, portanto não há perda para o merchant.
infraction.acceptedDisparado quando ocorre um reembolso real (valor devolvido ao pagador maior que zero). O valor bloqueado é debitado definitivamente do merchant — do saldo retido, se o bloqueio ainda não havia sido liberado, ou do saldo disponível, caso a infração já tivesse passado por defended. A cobrança vinculada (charge_id) é marcada como refunded. Status terminal.
Os dados de enriquecimento são agrupados em sub-objetos (payer, freeze, deadlines), seguindo a mesma convenção do payload de cobrança. O enriquecimento é obtido de forma assíncrona, então esses campos podem vir null — e um sub-objeto inteiro é null quando não há dados.
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"event": "infraction.accepted",
"infraction": {
"id": "i1n2f3r4-a5c6-7890-tion-000000000001",
"status": "accepted",
"type": "fraud",
"amount": 10000,
"currency": "BRL",
"external_infraction_id"
infraction| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID único da infração |
status | string | Status atual (open, under_defense, cancelled, defended, accepted) |
type | string | null | Tipo da infração reportado pela adquirente (ex: fraud) |
amount | number | Valor contestado em centavos |
currency | string | Moeda (ex: BRL) |
external_infraction_id | string | ID da infração na adquirente |
external_transaction_id | string | null | ID da transação na adquirente (se aplicável) |
charge_id | string | null | ID da cobrança vinculada, quando resolvida |
reason | string | null | Descrição do motivo da contestação |
fraud_type | number | null | Código da categoria de fraude informado pela adquirente |
end_to_end_id | string | null | End-to-end ID (E2E) da transação PIX contestada |
payer | object | null | Dados do pagador que abriu a contestação; null quando não enriquecido |
freeze | object | null | Dados do bloqueio do valor; null quando não enriquecido |
deadlines | object | null | Prazos da infração; null quando não há prazos |
enrichment | object | null | Payload completo de enriquecimento (timeline, reembolsos, recebedor) |
opened_at | string | null | Data/hora de abertura da infração (ISO 8601) |
resolved_at | string | null | Data/hora de resolução, quando em estado final (ISO 8601) |
enriched_at | string | null | Data/hora em que a infração foi enriquecida (ISO 8601) |
payer| Campo | Tipo | Descrição |
|---|---|---|
name | string | null | Nome do pagador |
document | string | null | CPF/CNPJ do pagador |
ispb | string | null | ISPB do banco do pagador |
account | string | null | Conta do pagador |
freeze| Campo | Tipo | Descrição |
|---|---|---|
status | string | null | Status do bloqueio na adquirente |
blocked_amount | number | null | Valor bloqueado em centavos |
automatic_refund | boolean | null | Indica se o reembolso é automático |
can_cancel | boolean | null | Indica se a infração ainda pode ser cancelada |
deadlines| Campo | Tipo | Descrição |
|---|---|---|
analysis | string | null | Prazo para análise/defesa (ISO 8601) |
manual_refund | string | null | Prazo para reembolso manual (ISO 8601) |
Além das infrações reportadas diretamente pelas adquirentes PIX, a DiamantePay também recebe infrações MED originadas na Accithus através do webhook de entrada da integração de adquirente (autenticado via header X-Accithus-Signature). Os eventos infraction.* enviados pela Accithus são ingeridos e seguem exatamente o mesmo ciclo de vida e disparam os mesmos eventos de webhook descritos nesta página para o merchant.