Endpoint de captura de leads para mattosaeroportos.com.br. Aceita POST de qualquer plataforma de formulários (Webflow, WordPress, HTML puro, Typeform, etc.).
| Método | Path | Descrição |
|---|---|---|
POST | /lead | Registra um novo lead |
| Campo | Tipo | Descrição | |
|---|---|---|---|
nome | obrigatório | string | Nome ou razão social. Mín. 2 caracteres. |
email | obrigatório | string | E-mail válido. Usado para dedup e contato. |
lgpd_consent | obrigatório | boolean true | Consentimento explícito LGPD. Deve ser o literal true. Rejeitado se ausente ou false. |
telefone | opcional | string | Telefone/WhatsApp. Formato livre, máx. 20 chars. |
empresa | opcional | string | Nome da empresa. Máx. 100 chars. |
cnpj | opcional | string | CNPJ (com ou sem formatação). Usado para dedup PJ — se 14 dígitos, chave principal de dedup. |
mensagem | opcional | string | Mensagem livre do lead. Máx. 2000 chars. |
servico | opcional | string | Serviço de interesse. Máx. 50 chars. |
segmento | opcional | string | Hint de segmento. Valores aceitos: piloto, arquiteto, construtora, condomínio de luxo, resort, hotel de luxo, hotel fazenda, vinícolas, náutica, shopping, loja de carro de luxo, empresas aéreas, empresa +10m/mês. Valor desconhecido é ignorado (não rejeitado). |
utm_source | opcional | string | UTM tracking. Máx. 100 chars cada. |
utm_medium | opcional | string | |
utm_campaign | opcional | string | |
utm_content | opcional | string | |
utm_term | opcional | string |
| HTTP | Significado | Body JSON |
|---|---|---|
| 201 | Lead registrado | { site_lead_id, dimensions: { origem, segmento, relacao, setor_mercado, ... } } |
| 400 | Payload inválido | { error: "validation_failed", details: [...] } |
| 409 | Lead já existe (dedup) | { error: "already_exists", by: "email"|"cnpj" } |
| 429 | Rate limit (10 req/min/IP) | { error: "rate_limit", retry_after_s: 60 } |
| 405 | Método não permitido | { error: "method_not_allowed" } |
curl -s -X POST http://localhost:3456/lead \
-H 'Content-Type: application/json' \
-d '{
"nome": "Matheus Mattos",
"email": "matheus@empresa.com.br",
"telefone": "+55 11 99999-0000",
"empresa": "Empresa Exemplo Ltda",
"cnpj": "12.345.678/0001-95",
"servico": "hangar",
"mensagem": "Quero conhecer os planos para hangar privativo.",
"segmento": "empresas aéreas",
"lgpd_consent": true,
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "site-2026"
}'
Adicione um bloco Form com campos que mapeiem para os nomes acima. No Form Settings → Action, defina a URL do endpoint (após deploy). Use um Hidden Field para lgpd_consent com valor true.
lgpd_consent → HTTP 400 rejeitadonome → HTTP 400 rejeitadonode scripts/site-lead-intake.cjs) na VPS com as credenciais de prod em .env (as mesmas que os outros scripts usam).api.mattosaeroportos.com.br/lead) para a porta 3456 do servidor via nginx/Caddy. Ou usar um Supabase Edge Function como proxy se preferir serverless.mattosaeroportos.com.br e configurar o form action para a URL pública acima. Para Webflow: Form Settings → Action URL. Para WordPress: plugin de forms com Custom Action. Para HTML puro: action="URL" + method="POST".Access-Control-Allow-Origin com o domínio do site (já incluído no endpoint — mudar de * para o domínio exato é boa prática em produção).Endpoint construído em 2026-08-24 · scripts/site-lead-intake.cjs