{
"id": "evt_01k2m4n6p8q0r2s4t6u8w0x2y4",
"type": "med.opened",
"created_at": "2026-09-16T13:22:41+00:00",
"data": {
"med": {
"object": "med",
"id": "med_01k2m4n5r3t7v9x1z3b5d7f9h1",
"status": "open",
"reason": "Não reconheço esta compra no meu extrato.",
"held_amount": 10000,
"currency": "BRL",
"end_to_end_id": "E12345678202608041200",
"purchase_date": "2026-08-04",
"opened_by": "customer",
"claimant": {
"name": "Maria Souza"
},
"evidence": [
{
"id": 41,
"side": "claimant",
"filename": "extrato-do-banco.pdf",
"mime": "application/pdf",
"size": 184320,
"sent_at": "2026-09-16T13:22:40+00:00"
}
],
"events": [
{
"type": "opened",
"at": "2026-09-16T13:22:40+00:00",
"held_cents": 10000,
"charge_code": "ch_01k1y6r6m6q2x0p3d9v4t7c8n2",
"evidence_count": 1
}
],
"opened_at": "2026-09-16T13:22:40+00:00",
"defence_deadline": "2026-09-23T13:22:40+00:00",
"responded_at": null,
"decided_at": null,
"decision_note": null,
"resolved_by": null,
"refund": null
},
"charge": {
"object": "charge",
"id": "ch_01k1y6r6m6q2x0p3d9v4t7c8n2",
"status": "paid",
"payment_method": "pix",
"amount": 10000,
"currency": "BRL",
"platform_fee": 798,
"net_amount": 9103,
"refunded_amount": 0,
"description": "Curso de Vue 3",
"reference": "pedido-1042",
"metadata": {
"carrinho": "cart_88f21"
},
"customer": {
"name": "João Comprador",
"email": "joao@exemplo.com.br",
"document": "111.***.***-35"
},
"pix": {
"qr_code": "00020101021226840014br.gov.bcb.pix2562qrcodepix.example.com/v2/abcd1234",
"expires_at": "2026-08-05T14:00:00+00:00",
"end_to_end_id": "E12345678202608041200"
},
"created_at": "2026-08-04T14:00:00+00:00",
"paid_at": "2026-08-04T14:03:11+00:00",
"expired_at": null,
"refunded_at": null
}
}
}Eventos de contestação (MED)
med.opened
Enviado quando o comprador abre uma contestação de Pix. O valor sai do saldo e fica retido até a decisão.
WEBHOOK
med.opened
{
"id": "evt_01k2m4n6p8q0r2s4t6u8w0x2y4",
"type": "med.opened",
"created_at": "2026-09-16T13:22:41+00:00",
"data": {
"med": {
"object": "med",
"id": "med_01k2m4n5r3t7v9x1z3b5d7f9h1",
"status": "open",
"reason": "Não reconheço esta compra no meu extrato.",
"held_amount": 10000,
"currency": "BRL",
"end_to_end_id": "E12345678202608041200",
"purchase_date": "2026-08-04",
"opened_by": "customer",
"claimant": {
"name": "Maria Souza"
},
"evidence": [
{
"id": 41,
"side": "claimant",
"filename": "extrato-do-banco.pdf",
"mime": "application/pdf",
"size": 184320,
"sent_at": "2026-09-16T13:22:40+00:00"
}
],
"events": [
{
"type": "opened",
"at": "2026-09-16T13:22:40+00:00",
"held_cents": 10000,
"charge_code": "ch_01k1y6r6m6q2x0p3d9v4t7c8n2",
"evidence_count": 1
}
],
"opened_at": "2026-09-16T13:22:40+00:00",
"defence_deadline": "2026-09-23T13:22:40+00:00",
"responded_at": null,
"decided_at": null,
"decision_note": null,
"resolved_by": null,
"refund": null
},
"charge": {
"object": "charge",
"id": "ch_01k1y6r6m6q2x0p3d9v4t7c8n2",
"status": "paid",
"payment_method": "pix",
"amount": 10000,
"currency": "BRL",
"platform_fee": 798,
"net_amount": 9103,
"refunded_amount": 0,
"description": "Curso de Vue 3",
"reference": "pedido-1042",
"metadata": {
"carrinho": "cart_88f21"
},
"customer": {
"name": "João Comprador",
"email": "joao@exemplo.com.br",
"document": "111.***.***-35"
},
"pix": {
"qr_code": "00020101021226840014br.gov.bcb.pix2562qrcodepix.example.com/v2/abcd1234",
"expires_at": "2026-08-05T14:00:00+00:00",
"end_to_end_id": "E12345678202608041200"
},
"created_at": "2026-08-04T14:00:00+00:00",
"paid_at": "2026-08-04T14:03:11+00:00",
"expired_at": null,
"refunded_at": null
}
}
}Segure a entrega. Uma contestação pode terminar com o dinheiro devolvido ao comprador, e o
produto já entregue não volta. Confira a assinatura antes de gravar qualquer coisa. Ver
Verificar a assinatura.
charge.in_analysis de Pix:
é um aviso de espera, não um desfecho. O resultado chega depois, como
med.approved ou
med.rejected.
Quando o evento chega, o valor já saiu do saldo disponível e não é sacável — ele aparece em “Em
contestação” no painel. held_amount é o que foi retido, congelado na abertura.
O prazo diz de quem é a vez
defence_deadline é até quando você pode enviar a sua versão pelo painel. Ele não trava a decisão
da Vext: um caso sem defesa é decidido do mesmo jeito, com o que houver nos autos.
Quem contestou não é quem pagou
data.med.claimant traz só o nome de quem abriu a contestação. Os dados de quem pagou continuam
em data.charge.customer, gravados no checkout — e podem ser outra pessoa, que é justamente a
alegação numa contestação por fraude.
opened_by muda o que você está respondendo: customer é o formulário público preenchido pela
pessoa, support é a Vext registrando o que ouviu por outro canal. As duas retêm igual, mas
sustentam alegações diferentes.
Guarde o caso pelo id
Os três eventos de MED carregam o mesmo objeto med, com o mesmo id, em estados diferentes.
Guarde o caso e atualize-o a cada evento, em vez de esperar corpos diferentes por tipo — é o que
evita reescrever o seu parser quando um passo novo aparecer na linha do tempo.Headers
Assinatura da entrega, no formato t=<timestamp>,v1=<hmac>, onde
hmac é HMAC-SHA256("<timestamp>.<corpo bruto>", <segredo>).
Duas regras ao conferir:
- Calcule sobre o corpo bruto, antes de desserializar. Reserializar muda espaçamento e ordem, e o HMAC deixa de bater.
- Recuse timestamps com mais de 5 minutos. É isso que impede
alguém que interceptou uma entrega de
charge.paidde reenviá-la quantas vezes quiser, com assinatura perfeitamente válida.
Pattern:
^t=[0-9]+,v1=[0-9a-f]{64}$Tipo do evento, repetido fora do corpo. Redundante com o payload e útil mesmo assim: permite filtrar no seu log sem desserializar nada.
Identificador da entrega. Cite-o ao abrir um chamado - é por ele que localizamos a tentativa, a resposta do seu servidor e o horário.
Body
application/json
Identificador do evento. Estável entre as retentativas da mesma entrega - use-o para deduplicar do seu lado.
Example:
"evt_01k1y6r7z2m4n6p8q0r2s4t6u8"
Available options:
charge.paid, charge.failed, charge.in_analysis, charge.refunded, charge.chargedback, withdrawal.paid, med.opened, med.approved, med.rejected Show child attributes
Show child attributes
Response
Recebido.