POST HTTP, sem precisar fazer polling na API.
Integrando com IA?
Copie o arquivo
llms.txt e cole no seu assistente de IA (Claude, ChatGPT, Cursor…). Ele contém o contrato completo do webhook — payload, campos, enums e schema de banco de dados — para que a IA gere a integração por você.Configurando no painel


Campos de configuração
Validando que a requisição veio da Velan
Qualquer pessoa que descubra a URL do seu webhook pode tentar enviar dados falsos para ela. O campo secret resolve isso: você define uma senha secreta que só você e a Velan conhecem. A cada requisição, a Velan usa essa senha para gerar um código único a partir do conteúdo enviado e inclui esse código no headerX-Velan-Signature. No seu servidor, você refaz o mesmo cálculo e compara — se os códigos batem, a requisição é legítima.
Se você já usa autenticação por token na URL (
?token=...), o secret é opcional. Use os dois juntos para uma camada extra de segurança.Payload de eventos de pedido
Todos os eventos relacionados a pedidos (order.*) entregam o mesmo envelope:
O objeto
purchase.tracking traz todos os parâmetros de URL capturados no checkout, com as chaves de UTM sempre presentes (null quando ausentes). Veja Eventos → Rastreamento.Vendas com order bump e upsell
Uma venda pode reunir vários produtos — o principal, order bumps marcados no checkout e um upsell aceito depois do pagamento. Os eventos ficam assim:
O array
data.order_bumps vem vazio ([]) quando a venda não tem bumps. Com
bumps, cada item traz o produto e a oferta adicionais:
Opcional: um evento por order bump
Se o seu sistema consome vendas por produto, ative “Order bumps em eventos separados” na configuração do webhook. Com a opção ativa, cada order bump da venda vira um pedido próprio na Velan (o mesmo que aparece no painel do produtor), e o webhook recebe um evento por pedido:
Nesse modo, o evento principal (
purchase.transaction do pedido principal)
traz apenas o valor da parte principal da compra — cada bump carrega o
próprio valor no próprio evento. Somando principal + bumps você chega ao total
da venda, sem risco de contar valores em dobro.
Os eventos por bump são emitidos a partir da aprovação do pagamento
(
order.paid) e no estorno (order.refunded, total ou por item). Eventos
anteriores ao pagamento (order.created, order.abandoned, order.expired,
order.failed) continuam sendo um único evento da compra inteira, com os
bumps listados em data.order_bumps.Com a opção desativada (padrão), nada muda: o evento de pedido representa
a compra inteira, com o total em
purchase.price e os bumps em
data.order_bumps, e purchase.order_bump.is_order_bump é sempre false.Mapeamento de eventos
O campoevent no payload usa nomenclatura compatível com o padrão Hotmart:
Variação de campos por evento
Todos os eventosorder.* entregam o mesmo envelope. O que muda entre eles são os valores de três campos:
approved_date só é preenchido após confirmação do pagamento. refund_date só é preenchido quando o reembolso é processado. Nos demais eventos, ambos são null.Mapeamento de status
O campopurchase.status segue a nomenclatura Hotmart:
Mapeamento de método de pagamento
Payload de lead criado
O eventolead.created usa um envelope diferente — não contém purchase nem buyer. O campo event é LEAD_CREATED:
Evento de visualização de checkout (checkout.viewed)
Evento opt-in exclusivo de webhooks: disparado quando um visitante abre a página do checkout, antes de preencher qualquer dado. Usa um envelope próprio, sem purchase, buyer ou lead — nenhum dado pessoal. Deduplicado por visitante + oferta (janela de 6 horas). Veja o payload completo em CHECKOUT_VIEWED.
Boas práticas
- Responda com
HTTP 2xxo mais rápido possível. Se precisar processar, enfileire a tarefa e responda imediatamente. - A Velan faz retry automático em caso de falha. Após 10 falhas consecutivas, a integração é desativada pelo circuit breaker.
- Use o campo
purchase.transaction(UUID do pedido) como chave de idempotência para evitar processamento duplicado.
