Skip to main content
WEBHOOK
Confira a assinatura antes de agir. Ver Verificar a assinatura.
O evento traz a cobrança e o estorno, porque as duas perguntas aparecem juntas do outro lado: quanto voltou (o estorno) e se sobrou algo (a cobrança, com status e refunded_amount já atualizados). Uma venda devolvida pela metade chega como partially_refunded, não refunded.

Authorizations

Authorization
string
header
required

Chave secreta do vendedor, criada no painel em Desenvolvedores.

O valor em claro existe uma única vez, na criação. Guardamos só o hash SHA-256 - nem o suporte consegue recuperá-lo, o que é o ponto: um dump do nosso banco não permite cobrar em nome de ninguém.

A chave vai no servidor. Colocá-la no navegador do comprador a entrega a qualquer pessoa que abra a página.

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.refunded,
withdrawal.paid
created_at
string<date-time>
required
data
object
required

Response

Recebido.