Skip to main content
WEBHOOK
approved é a contestação deferida — ou seja, você perdeu. O adjetivo descreve a decisão sobre a contestação, não sobre a sua loja. Um sistema que leia este evento como “aprovado para mim” libera acesso numa venda que acabou de ser devolvida.
É aqui que você reverte o que med.opened mandou segurar: cancele o acesso, o envio ou a assinatura. A retenção virou débito definitivo e o dinheiro já foi para o comprador. O nome espelha o status interno (status: approved) para que evento, painel e API falem uma língua só. Quem quiser o placar tem status e resolved_by; o painel mostra “Perdida”. Confira a assinatura antes de agir. Ver Verificar a assinatura.

O que vem atualizado

data.charge chega com status e refunded_amount já atualizados, e data.med.refund descreve o estorno feito ao comprador — do mesmo jeito que em charge.refunded, para o seu código ler os dois pelo mesmo caminho. resolved_by diz de onde veio o desfecho: platform é a Vext decidindo, seller é você tendo assumido a contestação pelo painel.
refund vem null numa contestação deferida cuja venda já havia sido devolvida por outro caminho. Leia data.charge.refunded_amount para saber quanto voltou, e não a presença do objeto.

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.