Skip to main content
WEBHOOK
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.
Trate este evento como um 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

X-Vext-Signature
string
required

Assinatura da entrega, no formato t=<timestamp>,v1=<hmac>, onde hmac é HMAC-SHA256("<timestamp>.<corpo bruto>", <segredo>).

Duas regras ao conferir:

  1. Calcule sobre o corpo bruto, antes de desserializar. Reserializar muda espaçamento e ordem, e o HMAC deixa de bater.
  2. Recuse timestamps com mais de 5 minutos. É isso que impede alguém que interceptou uma entrega de charge.paid de reenviá-la quantas vezes quiser, com assinatura perfeitamente válida.
Pattern: ^t=[0-9]+,v1=[0-9a-f]{64}$
X-Vext-Event
string
required

Tipo do evento, repetido fora do corpo. Redundante com o payload e útil mesmo assim: permite filtrar no seu log sem desserializar nada.

X-Vext-Delivery
string
required

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
id
string
required

Identificador do evento. Estável entre as retentativas da mesma entrega - use-o para deduplicar do seu lado.

Example:

"evt_01k1y6r7z2m4n6p8q0r2s4t6u8"

type
enum<string>
required
Available options:
charge.paid,
charge.failed,
charge.in_analysis,
charge.refunded,
charge.chargedback,
withdrawal.paid,
med.opened,
med.approved,
med.rejected
created_at
string<date-time>
required
data
object
required

Response

Recebido.