/api/webhooks/formsCadastrar ou atualizar um lead
Recebe o envio de um formulário externo e cria o contato no CRM, ou atualiza se ele já existir. O contato é procurado pelo telefone (chave única por conta) e, quando não vem telefone, pelo e-mail: mandar o mesmo lead duas vezes não duplica cadastro.
Contato novo entra sozinho na primeira etapa do funil principal, recebe um responsável pela regra de distribuição da conta, gera aviso no sino e dispara os gatilhos de automação form_submitted e contact_created.
Origem: mande source quando souber. Se não mandar, a origem é deduzida dos parâmetros de rastreio (gclid vira Google Ads, fbclid vira Meta Ads, e assim por diante), o que costuma ser mais fiel do que o formulário adivinhar.
Limite: 30 chamadas por minuto por IP.
Corpo da requisição
Informe pelo menos telefone ou e-mail.
| Campo | Tipo | O que é |
|---|---|---|
name | texto | Nome de quem preencheu |
phone | texto | Telefone em qualquer formato; o CRM normaliza para E.164. É a chave que evita duplicar. |
email | Usado para deduplicar quando não vem telefone | |
source | texto (lista fechada) | Origem do lead. Sem este campo, é deduzida do rastreio abaixo.meta_ads_facebookmeta_ads_instagramgoogle_adslinkedin_adstiktok_adswhatsappinstagramfacebooklinkedinsitegoogle_organicoindicacaoformmanualemail_inboundeventooutro |
source_detail | texto | Detalhe livre da origem: nome da campanha, do conjunto, do criativo. |
website | texto | Site do contato ou da empresa dele. Fica gravado no cadastro. |
custom_fields | objeto livre | Campos extras que vão para a ficha do contato. Precisam existir em Configurações → Campos customizados para aparecerem na tela. |
utm_source | texto | Parâmetro de rastreio da página |
utm_medium | texto | Parâmetro de rastreio da página |
utm_campaign | texto | Vira o detalhe da origem quando source_detail não vem |
gclid | texto | Identificador de clique do Google Ads |
wbraid | texto | Usado pelo Google no lugar do gclid quando o iOS bloqueia o rastreio |
gbraid | texto | Idem wbraid |
fbclid | texto | Identificador de clique da Meta |
igshid | texto | Identificador de clique do Instagram |
ttclid | texto | Identificador de clique do TikTok |
page_url | texto | Página onde o formulário estava |
referrer | texto | Página de onde a pessoa veio |
Como chamar
curl -X POST https://app.digiflow.systems/api/webhooks/forms \
-H "Authorization: Bearer df_sua_chave" \
-H "Content-Type: application/json" \
-d '{
"name": "Maria Silva",
"phone": "(16) 99999-9999"
}'{
"name": "Maria Silva",
"phone": "(16) 99999-9999",
"email": "maria@email.com",
"source": "google_ads",
"source_detail": "Campanha Institucional | Conjunto SP | Criativo 3",
"custom_fields": {
"interesse": "Plano anual",
"score": 8
}
}{
"name": "Maria Silva",
"phone": "(16) 99999-9999",
"gclid": "Cj0KCQjw...",
"utm_campaign": "institucional-sp",
"page_url": "https://site-do-cliente.com.br/orcamento"
}Respostas
- 201
Lead criado ou atualizado.
{ "ok": true, "contact_id": "3f7c1a90-2b44-4f0e-9a1d-88c2b4e7d501" } - 400
Corpo inválido: falta telefone e e-mail, telefone impossível de normalizar, ou origem fora da lista.
{ "error": "Informe pelo menos telefone ou e-mail" } - 401
Chave ausente, inválida ou desativada.
{ "error": "API key inválida" } - 429
Limite de chamadas por minuto estourado. O cabeçalho Retry-After diz quantos segundos esperar.
{ "error": "Muitas requisições" }

