Referência dos webhooks
Os quatro eventos, os cabeçalhos de cada entrega e todos os campos do corpo.
Eventos
Os quatro acontecimentos que podem disparar uma chamada. O valor ao lado de cada nome é o que chega no campo event.
Novo lead
Um lead entrou na sua base, por qualquer canal, e recebeu o primeiro status do funil.
status.previous vem null, porque não havia etapa anterior. Se o lead acabou de ser criado por um formulário, formSubmissions traz esse envio e o evento Submissão de formulário também é disparado.
Corpo: Corpo da entrega — a mesma estrutura em todos os eventos.
O que responder
- 200 Qualquer resposta 2xx encerra a entrega. O corpo da sua resposta é ignorado.
Entrega
Mudança de status
Um lead mudou de etapa no funil. Vale para qualquer transição, inclusive as finais.
status.previous traz a etapa de onde ele saiu: comparar os dois code diz exatamente qual foi a transição. Uma conversão também é uma mudança de status, então quem assina este evento e Lead convertido recebe duas chamadas.
Corpo: Corpo da entrega — a mesma estrutura em todos os eventos.
O que responder
- 200 Qualquer resposta 2xx encerra a entrega. O corpo da sua resposta é ignorado.
Entrega
Lead convertido
Um lead chegou à etapa de conversão, END_WON. É a venda ganha isolada das outras transições, para tratar conversão sem inspecionar código de etapa.
A estrutura é a de uma mudança de status. Marca a entrada em END_WON: um lead que já estava convertido e é salvo de novo no mesmo status não dispara o evento outra vez.
Corpo: Corpo da entrega — a mesma estrutura em todos os eventos.
O que responder
- 200 Qualquer resposta 2xx encerra a entrega. O corpo da sua resposta é ignorado.
Entrega
Submissão de formulário
Um formulário foi enviado, seja por um contato novo ou por alguém que já estava na base.
formSubmissions traz todos os envios daquele lead, do mais recente para o mais antigo — o primeiro item é sempre o que gerou a chamada. Aqui o bloco status é só contexto: diz em que etapa o lead está agora, e previous vem null mesmo que ele já tenha mudado de etapa antes. Quando o envio cria o lead, status.current é a primeira etapa do funil e o evento Novo lead também é disparado.
Corpo: Corpo da entrega — a mesma estrutura em todos os eventos.
O que responder
- 200 Qualquer resposta 2xx encerra a entrega. O corpo da sua resposta é ignorado.
Entrega
Cabeçalhos
Acompanham toda entrega. Cabeçalhos extras cadastrados no painel vêm junto, e estes três não podem ser sobrescritos.
| Campo | Tipo | Descrição |
|---|---|---|
| Content-Type | texto | Sempre application/json. |
| X-Webhook-Event | texto | Nome do evento que gerou a chamada. Permite rotear sem abrir o corpo. |
| X-Webhook-Signature | texto | sha256= seguido do HMAC-SHA256 do corpo, em hexadecimal, calculado com o secret do webhook. Ausente apenas se o webhook não tiver secret. |
Objetos
Formato dos blocos do corpo. Qualquer campo pode vir null quando o dado não existe para aquele lead.
Corpo da entrega
Mesma estrutura em todos os eventos. O que muda é o valor de event e quais blocos vêm preenchidos.
| Campo | Tipo | Descrição |
|---|---|---|
| event | texto | Nome do evento que gerou a chamada. Valores: new_lead, status_change, lead_converted, form_submission. |
| event_id | texto (uuid) | Identificador desta entrega. Repete nas retentativas da mesma entrega, então é por ele que se descarta o que já foi processado. |
| timestamp | texto | Momento em que o corpo foi montado, em UTC. |
| company | objeto (Empresa) | |
| lead | objeto (Lead) | Dados de contato e origem do lead, no estado em que ele está no momento do envio. |
| status | objeto (Status) | A etapa que o lead ocupa e de onde veio. Os códigos das etapas intermediárias são configuráveis por empresa; END_WON e END_LOST existem em todas. |
| tracking | objeto (Atribuição) | Origem consolidada do lead: campanha, UTMs, dispositivo e página. Qualquer campo vem null quando o dado não foi capturado. |
| formSubmissions | lista de objetos (Envio de formulário) | Formulários que este lead já enviou, do mais recente para o mais antigo. Lista vazia quando não houver. |
Empresa
| Campo | Tipo | Descrição |
|---|---|---|
| id | texto (uuid) | Identificador da empresa dona do lead. |
| whatsapp_phone | texto ou null | Reservado para uso futuro. Hoje chega sempre null. |
Lead
Dados de contato e origem do lead, no estado em que ele está no momento do envio.
| Campo | Tipo | Descrição |
|---|---|---|
| id | texto (uuid) | Identificador do lead na Leaper. Não muda; use como chave no seu sistema. |
| name | texto ou null | Nome do contato. |
| phone | texto ou null | Telefone com código do país, só dígitos. |
| texto ou null | E-mail do contato. | |
| source | texto (Origem do lead) | Valores possíveis de source. Leads antigos podem ter valores fora desta lista. |
| tags | texto ou null | Tags do lead, em texto. |
| created_at | texto ou null | Quando o lead entrou na Leaper. |
| created_from | texto ou null | Canal de entrada, como whatsapp, forms, external_api ou manual. |
| lead_value | texto ou número ou null | Valor do lead, como foi informado. Costuma chegar como texto. |
Status
A etapa que o lead ocupa e de onde veio. Os códigos das etapas intermediárias são configuráveis por empresa; END_WON e END_LOST existem em todas.
| Campo | Tipo | Descrição |
|---|---|---|
| current | objeto (Etapa do funil) | |
| previous | objeto (Etapa do funil) ou null | Mesma estrutura, referente à etapa anterior. null quando não havia etapa anterior ou quando o evento não descreve uma transição. |
Etapa do funil
| Campo | Tipo | Descrição |
|---|---|---|
| code | texto ou null | Código da etapa. É o campo estável para lógica no seu sistema, mas muda se a etapa for renomeada no painel — exceto END_WON e END_LOST. |
| name | texto ou null | Nome da etapa como aparece no painel. |
| changed_at | texto ou null | Quando o lead entrou nesta etapa, no horário de Brasília. |
Atribuição
Origem consolidada do lead: campanha, UTMs, dispositivo e página. Qualquer campo vem null quando o dado não foi capturado.
| Campo | Tipo | Descrição |
|---|---|---|
| source | texto (Origem do lead) | Valores possíveis de source. Leads antigos podem ter valores fora desta lista. |
| sourceApp | texto ou null | Aplicativo de onde a conversa nasceu, quando veio de anúncio. Ex.: instagram, facebook. |
| sourceUrl | texto ou null | Endereço de onde o clique partiu. |
| sourceType | texto ou null | Natureza da origem, quando identificada. Ex.: ad. |
| utmSource | texto ou null | UTM source consolidado do clique que originou o lead. |
| utmMedium | texto ou null | UTM medium. |
| utmCampaign | texto ou null | UTM campaign. Em Google Ads costuma ser o id numérico da campanha. |
| utmContent | texto ou null | UTM content. |
| utmTerm | texto ou null | UTM term. |
| referer | texto ou null | Página que encaminhou o visitante. |
| pageUrl | texto ou null | Página em que o clique ou o envio aconteceu. |
| device | texto ou null | Tipo de dispositivo. Ex.: mobile, desktop. |
| browser | texto ou null | Navegador do visitante. |
| os | texto ou null | Sistema operacional do visitante. |
| ipAddress | texto ou null | IP do visitante no momento da captura. |
| userAgent | texto ou null | User agent do visitante no momento da captura. |
| country | texto ou null | País do visitante, em duas letras. |
| clickId | texto ou null | Identificador do clique fornecido pela plataforma de anúncio. |
| clickIdType | texto ou null | Qual identificador é esse. Ex.: gclid, ctwa_clid, gbraid. |
| clickDate | texto ou null | Momento do clique. |
| campaignData | objeto ou null | Campanha, conjunto e anúncio de origem, quando identificados. O conteúdo varia conforme a plataforma, então leia por chave em vez de assumir um formato fixo. |
| formData | objeto (Formulário de origem) ou null | Resumo do formulário que originou o lead. |
| journey | lista de textos ou null | Páginas percorridas antes da conversão, quando o rastreamento do site está ativo. |
Formulário de origem
| Campo | Tipo | Descrição |
|---|---|---|
| formId | texto ou null | Identificador do formulário. |
| formName | texto ou null | Nome do formulário. |
| formSessionId | texto ou null | Identificador da sessão de preenchimento. |
| submittedAt | texto ou null | Quando o formulário foi enviado. |
Envio de formulário
| Campo | Tipo | Descrição |
|---|---|---|
| form_name | texto ou null | Nome do formulário. |
| answers | lista de objetos | Respostas enviadas. Cada item traz o campo, o rótulo exibido e o valor. |
| answers[].field | texto ou null | Nome técnico do campo. |
| answers[].label | texto ou null | Rótulo exibido no formulário. |
| answers[].value | texto ou número ou booleano ou null | Valor preenchido. |
| tracking | objeto ou null | Parâmetros capturados na página no momento do envio, com os nomes como vieram da URL. Ex.: utm_source, gclid, page_url. |
| submitted_at | texto ou null | Quando o formulário foi enviado. |
Origem do lead
Valores possíveis de source. Leads antigos podem ter valores fora desta lista.
| Valor | Descrição |
|---|---|
| PHONE | Contato por telefone. |
| Contato por e-mail. | |
| WEBSITE | Visita ao site sem campanha identificada. |
| Conversa de WhatsApp sem anúncio na origem. | |
| WHATSAPPBOT | Conversa iniciada por bot de WhatsApp. |
| METAADS_MSG | Anúncio do Meta que abre conversa no WhatsApp ou Instagram. |
| METAADS_SITE | Anúncio do Meta que leva ao site. |
| GOOGLE_SITE | Anúncio do Google que leva ao site. |
| TIKTOK_ADS | Anúncio do TikTok. |
| GOOGLE_ORGANIC | Busca orgânica no Google. |
| INSTAGRAM_ORGANIC | Tráfego orgânico do Instagram. |
| TIKTOK_ORGANIC | Tráfego orgânico do TikTok. |
| FACEBOOK_ORGANIC | Tráfego orgânico do Facebook. |
| YOUTUBE_ORGANIC | Tráfego orgânico do YouTube. |
| NO_TRACKING | Sem dados de rastreamento. |
