Skip to main content
Webhooks permitem que você receba os dados de cada evento diretamente no seu servidor via 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

Card da integração Webhook no painel da Velan Na tela de integrações, clique em INTEGRAR no card de Webhooks para abrir o modal de configuração. Modal de configuração do Webhook

Campos de configuração

A forma mais simples de autenticar é incluir um token diretamente na URL — sem configuração extra:

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 header X-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.
Como verificar no seu servidor:
Use sempre uma comparação segura contra timing attacks (hmac.compare_digest, crypto.timingSafeEqual, hmac.Equal) — nunca ==.

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:
Não some purchase.price com os valores de data.order_bumps: o total da compra já está em purchase.price. O array existe para você saber quais produtos compõem a venda (ex.: liberar acesso por produto).

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 campo event no payload usa nomenclatura compatível com o padrão Hotmart:

Variação de campos por evento

Todos os eventos order.* 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 campo purchase.status segue a nomenclatura Hotmart:

Mapeamento de método de pagamento


Payload de lead criado

O evento lead.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 2xx o 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.

Referência para LLMs

Para sistemas de IA ou automações que precisam entender o contrato completo deste webhook (schema detalhado de todos os campos, enums, nullability, persistência recomendada e ciclo de vida dos eventos), consulte o arquivo de referência estruturado: /integrations/webhook/llms.txt