Para quem programa
O AceleraZap recebe leads por webhook, envia cada lead ao seu sistema com assinatura e devolve a venda para os anúncios. Aqui estão os endereços, os campos e os exemplos para copiar e colar, e também o que ainda não existe. Se você não programa, passe este link para quem cuida do seu site ou do seu CRM.
Entrada: POST do seu sistema para o endereço com token. Saída: POST assinado do AceleraZap para o endereço que você cadastrou.
| Quero | Use isto | Plano |
|---|---|---|
| Receber leads de um formulário, CRM ou automação (n8n, Make, Zapier) | Webhook de entrada (captura por webhook) | Pro ou Business |
| Mandar os leads e as mudanças de etapa do AceleraZap para o meu sistema | Webhook de saída, com assinatura | Pro ou Business |
| Ter os leads como linhas numa planilha do Google | Google Sheets, pelo Apps Script | Pro ou Business |
| Captar leads no meu site | Widget, formulários, link curto e chat do site | Widget em todos os planos. Formulários hospedados no Pro ou Business |
| Devolver a venda, com o valor, ao Google Ads e à Meta | Conversion Bridge e Conversions API | Business |
| Medir os leads no Google Analytics 4 | ID de medição do GA4 | Pro ou Business. O envio direto do AceleraZap é do Business |
| Consultar, criar ou editar leads a partir do meu sistema | API de leads, com token | Liberada a pedido, no plano Business |

No painel, entre em Integrações e escolha o cartão Webhook. Abra a aba Receber dados.
Integrações → Webhook → Receber dados
Clique em + Novo webhook. Se a tela ainda estiver vazia, o botão se chama + Conectar CRM/webhook. Dê um nome, como Formulário do site, e clique em Continuar.
Ela já leva o seu token. Cole na ferramenta que vai enviar os leads. Só quem pode editar os formulários vê o endereço completo.
Clique em Detectar campos e faça um envio de teste pela sua ferramenta. O AceleraZap fica ouvindo por 15 minutos e mostra os campos que chegaram.
Clique em Concluir e mapear. Para cada campo escolha: Nome, WhatsApp, E-mail, Mensagem, Etapa do funil, Atendente (dono), Extra ou Ignorar.
Clique em Salvar e ativar captura. A partir daí, cada envio vira um lead no funil.

Faça um POST na URL de recebimento. O token vai no próprio endereço, em ?token=. O corpo pode ser JSON, x-www-form-urlencoded ou multipart/form-data. Os nomes dos campos são os que a sua ferramenta já usa. O mapeamento que você fez no painel diz o que cada um significa.
curl -X POST "https://app.acelerazap.com.br/api/v1/inbound/capture?token=SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"nome":"Maria Souza","whatsapp":"27999998888","email":"[email protected]","mensagem":"Quero um orçamento para o plano empresarial","etapa":"Qualificado","atendente":"[email protected]","utm_source":"google","utm_medium":"cpc","url":"https://seu-site.com.br/contato?utm_source=google&utm_medium=cpc&utm_campaign=orcamento-outubro"}'curl -X POST "https://app.acelerazap.com.br/api/v1/inbound/capture" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"nome":"Maria Souza","whatsapp":"27999998888","email":"[email protected]","mensagem":"Quero um orçamento para o plano empresarial","etapa":"Qualificado","atendente":"[email protected]","utm_source":"google","utm_medium":"cpc","url":"https://seu-site.com.br/contato?utm_source=google&utm_medium=cpc&utm_campaign=orcamento-outubro"}'Na etapa Mapear, você escolhe o destino de cada campo que a ferramenta enviou. Campo que você não mapeou entra como Extra.
| Opção no painel | O que faz |
|---|---|
| Nome | Vira o nome do lead. Vários campos de nome se juntam, como nome e sobrenome. |
| Vira o telefone. É ele que identifica o lead. | |
| Vira o e-mail. Se o formato for inválido, o e-mail é descartado e o lead entra mesmo assim. | |
| Mensagem | Texto livre da pessoa, sem rótulo. |
| Etapa do funil | Coloca o lead novo na etapa certa, por exemplo Qualificado. O lead que já existe não muda de etapa. |
| Atendente (dono) | Atribui o lead ao atendente pelo nome ou pelo e-mail cadastrado no AceleraZap. |
| Extra | Aparece em Dados do formulário, com o rótulo que você escolher. |
| Ignorar | O campo é descartado. |
Abra o endereço no navegador, ou faça um GET. Com um token válido, a resposta diz se a conexão está pronta. Esse teste não cria lead.
curl "https://app.acelerazap.com.br/api/v1/inbound/capture?token=SEU_TOKEN"
# {"ok":true,"tokenValid":true,"ready":true,"status":"Pronto pra receber envios por POST.", ...}| Código | Resposta | O que significa |
|---|---|---|
| 200 | { "ok": true, "leadId": "clx...", "created": true } | Lead criado. Com created false, o lead já existia e foi atualizado. |
| 200 | { "ok": true, "skipped": "unmapped" } | Recebido, mas não virou lead. O valor unmapped quer dizer que a conexão ainda não tem o mapeamento salvo. O valor inactive quer dizer que ela está pausada. |
| 200 | { "ok": true, "sample": true, "fields": 8 } | A detecção de campos está ligada e a conexão ainda não está mapeada, ou está pausada: o envio serviu de amostra e não virou lead. Com a conexão mapeada e ativa, o lead é criado normalmente. |
| 400 | { "ok": false, "error": "missing_token" } | Faltou o token, na URL ou no cabeçalho Authorization. |
| 400 | { "ok": false, "error": "empty_payload" } | O corpo chegou vazio ou sem nenhum campo legível. |
| 400 | { "ok": false, "error": "no_identity" } | Depois do mapeamento não sobrou nome, telefone nem e-mail. |
| 400 | { "ok": false, "error": "invalid_body" } | O corpo não pôde ser lido como JSON, formulário ou multipart. |
| 401 | { "ok": false, "error": "invalid_token" } | Token fora do formato ou desconhecido. |
| 403 | { "ok": false, "error": "origin_not_allowed" } | Só para o token de uma captura de formulário do seu site, criada em Formulários: ela confere o domínio de origem. O token da conexão por webhook não passa por essa checagem. |
| 404 | { "ok": false, "error": "not_found" } | A conta está inativa. |
| 413 | { "ok": false, "error": "payload_too_large" } | Corpo grande demais. Acima de 64 KB o servidor responde 413, possivelmente sem corpo JSON. Um lead cabe em poucos KB. |
| 429 | { "ok": false, "error": "rate_limited" } | Muitos envios seguidos. Espere um minuto e envie de novo. |
| Item | Valor |
|---|---|
| Formatos aceitos | JSON, x-www-form-urlencoded e multipart/form-data |
| Método | POST. O GET na mesma URL só testa o token e não cria lead |
| Autenticação | token na URL (?token=) ou no cabeçalho Authorization: Bearer |
| Formato do token | começa com fc_ e tem 35 caracteres |
| Velocidade | 30 envios por minuto por token e origem, e 600 por minuto por origem |
| Campos lidos | até 80 campos por envio, e cada valor é cortado em 2.000 caracteres. Objetos aninhados viram chaves com colchetes, como form[email] |
| Tamanho do corpo | até 64 KB. Acima disso o servidor responde 413. Como 80 campos de 2.000 caracteres passam desse tamanho, vale o limite menor |
| Nome | até 120 caracteres |
| até 160 caracteres e formato válido | |
| Telefone | de 10 a 13 dígitos, com ou sem 55 e máscara. Fora disso, o lead entra sem telefone |
| Mensagem | até 1.500 caracteres, somando a mensagem e os campos extras |
Contas que já geraram a chave na tela Webhook, em Webhook legado (chave única da conta), usam campos fixos, sem mapeamento. Contas novas usam a conexão com token descrita acima: a tela só mostra o webhook legado para quem já tinha a chave. Só ele tem o endereço que atualiza a etapa de um lead e informa o valor da venda.
Endereço de cadastro: POST https://app.acelerazap.com.br/api/v1/inbound/webhook. A chave vai em ?key= ou em Authorization: Bearer. O limite é de 30 envios por minuto.
| Campo | Regra |
|---|---|
name | obrigatório |
phone | obrigatório, com pelo menos 10 dígitos |
email | opcional |
message | opcional |
url | opcional, a página de origem |
source | opcional, vira uma linha Origem na mensagem |
deal_stage | opcional, a etapa em que o lead NOVO nasce |
deal_user | opcional, nome ou e-mail do atendente dono |
curl -X POST "https://app.acelerazap.com.br/api/v1/inbound/webhook" \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"name":"João Silva","phone":"11999998888","email":"[email protected]","source":"n8n","deal_stage":"Qualificado"}'A resposta traz leadId e created. Para fechar a venda depois, guarde o leadId e chame POST https://app.acelerazap.com.br/api/v1/inbound/status, com a mesma chave. Ele faz o mesmo que mover o lead no painel: registra o histórico, avisa o webhook de saída e envia a conversão.
curl -X POST "https://app.acelerazap.com.br/api/v1/inbound/status" \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"leadId":"ID_DO_LEAD","stage":"won","value":"1.299,90"}'
No painel, entre em Integrações, escolha o cartão Webhook e fique na aba Enviar dados.
Integrações → Webhook → Enviar dados
No campo URL do endpoint, cole o endereço que vai receber o POST. Ele precisa começar com https://.
Marque Lead criado, Lead atualizado e Etapa do lead mudou, conforme o que o seu sistema precisa. Por padrão vem só Lead criado.
Clique em Criar webhook. O segredo aparece inteiro só agora: copie e guarde no seu sistema. Depois, a tela mostra só o final. Se perder, use Regenerar e atualize o segredo no seu sistema.
Clique em Enviar teste. O seu endereço recebe um lead de teste, com o cabeçalho X-AceleraZap-Test: true. Em Últimas entregas você vê o resultado de cada envio, com o botão Reenviar nos que falharam.
| No painel | Valor enviado | Quando sai |
|---|---|---|
| Lead criado | lead.created | Na primeira vez que o lead entra pelo widget, por um formulário, pelo chat do site, pelo webhook de entrada, pela API de leads ou pelo formulário de leads do Google Ads, e quando alguém cadastra o lead à mão no painel. Não sai para o lead que nasce de uma conversa de WhatsApp, de uma importação de planilha nem do link curto. |
| Lead atualizado | lead.updated | O mesmo lead enviado de novo, com o que ele preencheu depois. Sai também quando o motivo da perda é gravado ou trocado, ou quando o valor, o telefone ou o e-mail mudam no painel. Pela API de leads, sai quando o e-mail muda pelo PATCH. |
| Etapa do lead mudou | lead.status_changed | Quando o status do lead muda. Mover o lead entre duas etapas do mesmo status não gera evento. O campo changes traz o status de antes e o de agora. |
| Cabeçalho | Valor | Para quê |
|---|---|---|
Content-Type | application/json | O corpo é sempre JSON. |
User-Agent | AceleraZap-Webhook/1.0 | Identifica o envio nos seus registros. |
X-AceleraZap-Event | lead.created | O evento, o mesmo do campo event do corpo. |
X-AceleraZap-Signature | sha256=<hex do HMAC> | A assinatura do corpo. Veja como conferir logo abaixo. |
X-AceleraZap-Delivery | evt_... | O id do evento. É o mesmo do campo id do corpo e se repete em cada nova tentativa. |
X-AceleraZap-Test | true | Só no botão Enviar teste. |
X-AceleraZap-Retry | manual | Só quando alguém clica em Reenviar no painel. |
O corpo é sempre JSON, com o lead inteiro. Este é um lead.created. Os outros eventos têm o mesmo desenho, mudando event e changes.
{
"id": "evt_a1b2c3d4e5f6a7b8",
"event": "lead.created",
"createdAt": "2026-10-20T18:20:00.000Z",
"account": {
"id": "acc_xxx",
"name": "Sua Empresa"
},
"lead": {
"id": "lead_xxx",
"name": "Maria Souza",
"phone": "27999998888",
"phoneE164": "+5527999998888",
"email": "[email protected]",
"message": "Quero um orçamento",
"channel": "google_ads",
"device": "mobile",
"browser": "Chrome",
"os": "Android",
"state": "ES",
"url": "/contato",
"fullUrl": "https://seu-site.com.br/contato?utm_source=google&utm_medium=cpc&utm_campaign=orcamento",
"status": "new",
"stageId": "etapa_xxx",
"stageName": "Novo",
"widgetSiteId": null,
"departmentId": null,
"departmentName": null,
"createdAt": "2026-10-20T18:19:55.000Z",
"attribution": {
"gclid": "Cj0KCQjw...",
"gbraid": null,
"wbraid": null,
"fbclid": null,
"fbp": null,
"fbc": null,
"ctwaClid": null,
"utmSource": "google",
"utmMedium": "cpc",
"utmCampaign": "orcamento",
"utmTerm": null,
"utmContent": null,
"adCampaignId": "123456789",
"adCampaignName": "Orçamento"
},
"dealValue": null,
"dealValueBRL": null,
"currency": "BRL",
"dealClosedAt": null,
"assignedSeller": {
"id": "sel_xxx",
"name": "Carlos"
},
"tags": [
"Cliente VIP"
],
"lostReason": null,
"conversationChannel": "whatsapp",
"origin": "other",
"formName": null,
"lastActivityAt": "2026-10-20T18:19:55.000Z",
"qualificationAnswers": [
{
"questionId": "q_xxx",
"label": "Qual produto?",
"value": "Telha"
}
]
},
"changes": null
}Quando o lead é movido para Fechado, sai um lead.status_changed, com o status de antes e o de agora em changes. O valor costuma ser anotado depois, e então sai um lead.updated com o valor. Estes são os dois trechos:
{
"id": "evt_9f8e7d6c5b4a3210",
"event": "lead.status_changed",
"lead": {
"id": "lead_xxx",
"status": "won",
"stageName": "Fechado",
"dealValue": null,
"dealValueBRL": null,
"currency": "BRL",
"dealClosedAt": "2026-10-22T14:03:00.000Z"
},
"changes": {
"from": "qualified",
"to": "won",
"fromStageName": "Qualificado",
"toStageName": "Fechado"
}
}| Campo | Tipo | O que é |
|---|---|---|
id | texto | O id do evento, no formato evt_... Igual ao cabeçalho X-AceleraZap-Delivery. Use para ignorar repetidos. |
event | texto | lead.created, lead.updated ou lead.status_changed. |
createdAt | data ISO 8601 | Quando o evento foi gerado. |
account | objeto | O id e o nome da sua conta. |
lead.id | texto | O id do lead. Não muda em nenhum evento: use para criar ou atualizar no seu sistema. |
lead.phone | texto | Só dígitos, com DDD e sem o 55. Vazio quando o lead não tem telefone. |
lead.phoneE164 | texto ou null | O mesmo telefone no formato internacional, como +5527999998888. Vem null quando o número não é um telefone brasileiro completo. |
lead.email | texto | Vazio quando o lead não informou e-mail. |
lead.status | texto | Uma das chaves da tabela de etapas abaixo. É sempre uma delas, mesmo que você renomeie a etapa no funil. |
lead.stageId | texto ou null | A etapa do seu funil. Não muda se você renomear a etapa. Vem null quando o funil não tem etapa para aquele lead. |
lead.stageName | texto | O nome que você deu à etapa. Nunca vem vazio. |
lead.dealValue | inteiro ou null | O valor do negócio em centavos. 199050 é R$ 1.990,50. Vem null enquanto ninguém anotou o valor. |
lead.dealValueBRL | número ou null | O mesmo valor em reais, como 1990.5. Use um dos dois, nunca some. |
lead.dealClosedAt | data ou null | Quando a venda foi fechada. |
lead.attribution | objeto | Origem do anúncio: gclid, fbclid, ctwaClid, UTMs e a campanha. O nome da campanha pode chegar um pouco depois do primeiro evento. |
lead.assignedSeller | objeto ou null | O atendente dono do lead agora, com id e name. |
lead.tags | lista de textos | Os nomes das etiquetas, até 50. |
lead.lostReason | texto ou null | O motivo da perda, só em lead perdido ou desqualificado. No lead.status_changed que leva o lead para perdido, vem null se quem moveu o lead não gravou o motivo naquele momento. |
lead.origin | texto | form, form_capture, import ou other. |
lead.qualificationAnswers | lista | As respostas às perguntas do widget, cada uma com questionId, label e value. |
changes | objeto ou null | No lead.status_changed traz from, to, fromStageName e toStageName. O fromStageName vem null quando o lead não tinha etapa própria antes. Pode ganhar campos novos. |
| Valor enviado | Nome no painel | Significa |
|---|---|---|
new | Novo | Lead acabou de chegar, ainda não foi contatado |
contacted | Contatado | Primeiro contato feito |
qualified | Qualificado | Lead com perfil/interesse confirmado |
negotiating | Em negociação | Proposta em andamento |
waiting | Aguardando retorno | Esperando resposta do lead |
won | Fechado | Virou cliente / venda concluída |
post_sale | Pós-venda | Acompanhamento depois da venda |
support | Suporte | Atendimento / suporte |
renewal | Renovação | Renovação / recompra |
lost | Perdido | Lead não avançou |
disqualified | Desqualificado | Lead sem perfil ou inválido, descartado |
Contam como venda fechada won, post_sale, support e renewal. Nelas o lead traz dealClosedAt e, quando alguém anotou o valor, dealValue.
A assinatura é o HMAC SHA256 do corpo, calculado com o segredo da sua conta e escrito em hexadecimal. Ela vai no cabeçalho X-AceleraZap-Signature, com o prefixo sha256=. Para conferir, refaça a conta com o mesmo segredo e compare.
O segredo nunca viaja no envio. Só a assinatura vai, no cabeçalho X-AceleraZap-Signature.
const crypto = require("node:crypto");
// corpoCru: o corpo exatamente como chegou (Buffer ou texto).
// cabecalho: o valor de X-AceleraZap-Signature.
function assinaturaValida(corpoCru, segredo, cabecalho) {
const esperada =
"sha256=" + crypto.createHmac("sha256", segredo).update(corpoCru).digest("hex");
const a = Buffer.from(esperada);
const b = Buffer.from(cabecalho || "");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}| Item | Como funciona |
|---|---|
| Tentativas por evento | até 3. A primeira é imediata, a segunda espera 1 segundo e a terceira, 5 segundos |
| Tempo limite | 8 segundos por tentativa |
| O que conta como sucesso | qualquer resposta 2xx |
| Quando não tenta de novo | resposta 4xx (menos 408 e 429) e redirecionamento 3xx. O redirecionamento não é seguido e conta como falha |
| Quando tenta de novo | tempo esgotado, falha de conexão, 5xx, 408 e 429 |
| Falha do evento | o evento que esgota as tentativas sem sucesso soma 1 falha, e a resposta 4xx, que não tenta de novo, também soma 1. Um sucesso zera a conta |
| Aviso | os administradores da conta são avisados quando as falhas chegam à metade do limite e quando o webhook desliga |
| Desativação automática | depois de 20 falhas seguidas o webhook desliga sozinho e o selo Auto-desativado aparece na tela |
| Como reativar | corrija o endereço e clique em Salvar na tela do webhook, com Webhook ativo marcado. O contador volta a zero. Reenviar uma entrega que falhou também reativa o webhook, se o reenvio der certo |
Você tem 8 segundos. Confira a assinatura, guarde o evento, responda 200 e processe depois.
Todo evento tem um id. Se o mesmo id chegar de novo, por tentativa ou por reenvio manual, responda 200 e não processe outra vez.
Um mesmo lead gera vários eventos. Procure o registro pelo lead.id: achou, atualize, não achou, crie. Não crie um registro a cada evento.
Os eventos saem separados e podem chegar em ordem diferente. Use createdAt e lead.lastActivityAt para saber qual é o mais novo.
Calcule o HMAC sobre os bytes exatos que chegaram. Se você ler o JSON e gravar de novo, a assinatura deixa de bater.
A API de leads é liberada a pedido, no plano Business. Com a API liberada na conta, o administrador entra em Integrações e escolhe o cartão API de leads. Dê um nome ao token, escolha as permissões (Ler leads, Criar e editar leads) e a validade. Se a tela disser que a API não está liberada, peça ao suporte.
Integrações → API de leads
Ele aparece inteiro uma vez só, logo depois de criado, e começa com azp_. O AceleraZap não guarda o token, só uma impressão digital dele, que não serve para refazê-lo: se perder, crie outro e revogue o antigo.
Toda chamada leva o cabeçalho Authorization: Bearer seguido do token. Token na URL não é aceito.
Todos começam em https://app.acelerazap.com.br/api/v1/public/leads. A permissão é a que você marcou ao criar o token.
| Endereço | Permissão | O que faz |
|---|---|---|
GET /api/v1/public/leads | leads:read | Lista os leads da conta, do mais novo para o mais antigo, com filtros e páginas. |
GET /api/v1/public/leads/{id} | leads:read | Um lead pelo id. |
POST /api/v1/public/leads | leads:write | Cadastra um lead. Se o telefone já existe na conta, atualiza nome, e-mail e mensagem do lead em vez de duplicar. |
PATCH /api/v1/public/leads/{id} | leads:write | Corrige nome, e-mail e mensagem de um lead. |
A lista vem em data, do lead mais novo para o mais antigo. Quando há mais leads, a resposta traz nextCursor: mande o valor em cursor para pegar a página seguinte. Quando nextCursor vem null, acabou.
| Parâmetro | Como usar |
|---|---|
limit | quantos leads por página, de 1 a 100. Sem ele, 50 |
cursor | o nextCursor da resposta anterior, sem alterar. Sem ele, a primeira página |
status | uma das chaves de lead.status, como new, qualified ou won |
createdFrom | criados a partir desta data. Aceita 2026-10-01 (horário de Brasília) ou data e hora com fuso |
createdTo | criados antes desta data. Só com o dia, o dia inteiro entra |
phone | o telefone exato do lead, com DDD. Com ou sem 55 e máscara |
email | o e-mail exato do lead, sem diferença entre maiúsculas e minúsculas |
curl "https://app.acelerazap.com.br/api/v1/public/leads?status=won&createdFrom=2026-10-01&limit=100" \
-H "Authorization: Bearer SEU_TOKEN_DA_API"
# {"data":[{"id":"clx...","name":"Maria Souza", ...}],"nextCursor":"MjAyNi0x..."}O POST segue a regra de sempre: o lead é único por conta e telefone. Telefone que já existe atualiza o lead e responde 200 com created: false. Lead novo responde 201, entra na etapa Novo e conta no limite de leads do mês.
| Campo | Regra |
|---|---|
name | obrigatório no POST, até 120 caracteres |
phone | obrigatório no POST, com pelo menos 10 dígitos. Não muda pelo PATCH: é ele que identifica o lead |
email | opcional, formato válido. No PATCH, null apaga |
message | opcional, até 2.000 caracteres. No PATCH, null apaga |
url | opcional, só no POST: a página de origem |
source | opcional, só no POST: vira uma linha Origem na mensagem |
| Caso | O que acontece |
|---|---|
| Telefone que já existe | o POST atualiza só o nome, o e-mail (quando enviado) e a mensagem (quando message é enviado). A página de origem, o aparelho, o estado, o canal, as UTMs e os identificadores de anúncio do primeiro contato não mudam, e a etapa também não |
| Só source, sem message | não muda a mensagem de um lead que já existe. Em lead novo, vira a linha Origem da mensagem |
| Token sem a permissão Ler leads | o POST responde só { "data": { "id": "..." }, "created": true ou false } e o PATCH só { "data": { "id": "..." } }, sem os dados do lead. Com Ler leads, os dois devolvem o lead completo |
curl -X POST "https://app.acelerazap.com.br/api/v1/public/leads" \
-H "Authorization: Bearer SEU_TOKEN_DA_API" \
-H "Content-Type: application/json" \
-d '{"name":"Maria Souza","phone":"27999998888","email":"[email protected]","message":"Pediu orçamento pelo sistema da loja","source":"ERP"}'
# 201 {"data":{"id":"clx...", ...},"created":true}curl -X PATCH "https://app.acelerazap.com.br/api/v1/public/leads/ID_DO_LEAD" \
-H "Authorization: Bearer SEU_TOKEN_DA_API" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
# 200 {"data":{"id":"ID_DO_LEAD", ...}}Todo erro vem como { "error": { "code": "...", "message": "..." } }. O code não muda; a mensagem é para pessoas e pode mudar.
| HTTP | code | O que significa |
|---|---|---|
| 401 | unauthorized | Token ausente ou inválido. Envie o cabeçalho Authorization: Bearer com um token ativo, criado em Integrações, API de leads. |
| 403 | plan_required | O plano atual da conta não inclui a API de leads. Ela é do plano Business. |
| 403 | account_blocked | O acesso da conta está suspenso por cobrança. Regularize em Faturamento, no painel, para voltar a usar a API. |
| 403 | insufficient_scope | Este token não tem permissão para esta operação. |
| 403 | lead_locked | Este lead entrou depois do limite de leads do plano e fica bloqueado até a conta mudar de plano. Os dados dele não saem pela API enquanto isso. |
| 404 | lead_not_found | Lead não encontrado nesta conta. |
| 400 | stage_not_supported | Esta API não muda a etapa nem o valor da venda. Mude pelo painel. Contas com a chave do webhook de entrada também podem usar POST /api/v1/inbound/status. |
| 400 | invalid_json | O corpo não é um JSON válido. |
| 400 | validation_failed | Algum campo está fora do formato. |
| 400 | invalid_phone | O telefone precisa ter pelo menos 10 dígitos, com DDD. |
| 400 | invalid_email | O e-mail não tem um formato válido. |
| 400 | invalid_query | Algum parâmetro da busca está fora do formato. |
| 413 | payload_too_large | O corpo passou do limite de 16 KB. |
| 415 | unsupported_media_type | Envie o corpo como JSON, com o cabeçalho Content-Type: application/json. |
| 429 | rate_limited | Muitas requisições. O limite é de 60 por minuto por token. Espere os segundos do cabeçalho Retry-After e tente de novo. |
| 429 | too_many_failed_attempts | O token enviado não é válido, e este endereço de IP já enviou mais de 30 tokens inválidos no último minuto. Confira o token em Integrações, API de leads, e espere os segundos do cabeçalho Retry-After. |
| 500 | internal_error | Erro interno do AceleraZap ao processar a chamada. Tente de novo em alguns instantes. Repetir é seguro: o POST não duplica o lead, que é único por telefone, e o PATCH grava os mesmos valores. |
| Item | Valor |
|---|---|
| Plano | Liberada a pedido, no plano Business. Só o administrador da conta cria e revoga tokens. Se a conta mudar de plano, ou se a liberação for retirada, os tokens param de funcionar e voltam quando a conta voltar ao Business com a API liberada |
| Autenticação | cabeçalho Authorization: Bearer com o token. Na URL não vale |
| Formato do token | começa com azp_ e tem 47 caracteres |
| Velocidade | 60 chamadas por minuto por token. Acima disso, 429 rate_limited com o cabeçalho Retry-After |
| Token inválido | depois de 30 tokens inválidos no mesmo minuto, vindos do mesmo endereço de IP, a resposta passa de 401 para 429 too_many_failed_attempts, com Retry-After. Um token válido nunca é barrado pelos erros de outro, mesmo saindo do mesmo IP, como no Zapier e no Make |
| Página | até 100 leads, 50 se você não disser |
| Corpo | JSON, até 16 KB |
| Navegador | a API não responde a páginas de site (sem CORS). Chame do seu servidor ou da sua ferramenta de automação |
| Leads bloqueados | o lead que passou do limite do plano não aparece na lista e, pelo id, responde lead_locked |
| Atendentes | o token vale para a conta inteira, sem o recorte por atendente do painel |
O formulário é seu, feito como você quiser. Ele envia nome, WhatsApp e mensagem para o seu servidor.
Um POST na URL de recebimento, com o token guardado em variável de ambiente. O token nunca vai para o navegador.
A resposta traz created true e o leadId. O lead entra na etapa que o mapeamento indicar, e a conversa pode começar no WhatsApp.
Ele move o lead para Fechado. Isso gera o evento lead.status_changed, com o valor se ele já tiver sido anotado antes.
O valor pode ser anotado em qualquer etapa, e costuma vir depois de fechar. Quando ele é gravado, sai um lead.updated com dealValue em centavos e dealValueBRL em reais.
O webhook de saída envia os dois eventos assinados. O seu CRM confere a assinatura, ignora repetidos e atualiza o cliente pelo lead.id, guardando o valor quando ele deixar de ser null.
// No seu servidor: recebe o formulário e repassa ao AceleraZap.
app.post("/contato", express.json(), async (req, res) => {
const { nome, whatsapp, mensagem } = req.body;
const resposta = await fetch("https://app.acelerazap.com.br/api/v1/inbound/capture", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.ACELERAZAP_TOKEN,
"Content-Type": "application/json",
},
body: JSON.stringify({ nome, whatsapp, mensagem, etapa: "Novo" }),
});
const dados = await resposta.json();
// dados.leadId é o id do lead no AceleraZap. Guarde se precisar.
res.status(resposta.ok ? 200 : 502).json({ ok: resposta.ok });
});// No seu CRM: recebe o evento do AceleraZap.
// assinaturaValida é a função da seção "Como conferir a assinatura".
const jaProcessados = new Set(); // em produção, use o seu banco
app.post(
"/webhook/acelerazap",
express.raw({ type: "application/json" }),
(req, res) => {
const assinatura = req.get("x-acelerazap-signature");
if (!assinaturaValida(req.body, process.env.ACELERAZAP_SEGREDO, assinatura)) {
return res.status(401).send("assinatura invalida");
}
const evento = JSON.parse(req.body.toString("utf8"));
if (jaProcessados.has(evento.id)) return res.sendStatus(200);
jaProcessados.add(evento.id);
res.sendStatus(200); // responda antes de processar
const mudouOuAtualizou = ["lead.status_changed", "lead.updated"].includes(evento.event);
if (mudouOuAtualizou && evento.lead.status === "won") {
// atualize o cliente pelo evento.lead.id. O valor pode vir já no
// status_changed ou só depois, em um lead.updated: grave
// evento.lead.dealValueBRL quando ele não for null.
}
},
);O script do AceleraZap no seu site abre o botão de WhatsApp, pede os dados e guarda o lead e a origem do anúncio. Está em todos os planos.
Formulários hospedados pelo AceleraZap e captura dos formulários que o seu site já tem, como Contact Form 7, Elementor e WPForms. O script lê os campos e você diz no mapeamento o que é cada um. São do plano Pro e do Business.
Links rastreáveis para anúncios e redes sociais, e uma página de links com o botão do WhatsApp. O lead nasce com a origem de onde o clique veio.
Uma conversa no próprio site que vira lead e entra na caixa de conversas.
Cada lead vira uma linha na sua planilha, e a mesma linha é atualizada quando o lead muda de etapa. Você cola um script na sua própria planilha e nos entrega só o endereço dele.
No painel, entre em Integrações e escolha o cartão Google Sheets.
Integrações → Google Sheets
Na planilha, vá em Extensões → Apps Script e cole o script que a tela mostra.
Clique em Implantar → Nova implantação e publique como app da Web. Copie o endereço que termina em /exec.
Volte à tela do Google Sheets, cole o endereço e clique em Salvar. A planilha continua sendo sua: o AceleraZap guarda só o endereço, que você pode revogar quando quiser.
Cada linha tem as colunas: leadId, nome, telefone, email, mensagem, etapa, origem, campanha, estado, criadoEm. A coluna leadId é a chave: o script atualiza a linha do lead em vez de criar outra.
Quando o lead vira venda, o AceleraZap envia o resultado, com o valor, para onde você anuncia. Aqui o sentido é de saída, e você não programa nada.
Quando o lead vira venda, a conversão offline vai ao Google Ads com o valor do negócio, ligada ao clique do anúncio. Lead perdido tem a conversão retirada.
Conversões
O evento de venda vai à Meta com o valor. Quem chegou por anúncio que abre o WhatsApp é ligado ao evento pelo clique da conversa.
Conversões
Informe o ID de medição e cada lead capturado vira evento. O envio direto do AceleraZap, que não depende do navegador do visitante, é do plano Business.
Integrações → Google Analytics
Para entender o que a venda de volta muda nas campanhas, veja Conversões para Google e Meta.
A conexão com o WhatsApp é feita pelo painel, em Configurar → Conexões, pelo login oficial da Meta. Hoje não existe API para enviar mensagens pelo AceleraZap.
A API de leads não muda a etapa do funil nem o valor da venda. Isso é feito no painel.
Não há pacotes prontos para Node, Python ou PHP. Os exemplos desta página usam só HTTP.
Hoje o Zapier se conecta pelo webhook de entrada e pelo de saída.
Integração nativa com o RD Station. Hoje, envie os leads pelo webhook de saída ou por uma ferramenta de automação.
Integração nativa com o Pipedrive. Hoje, use o webhook de saída ou uma ferramenta de automação.
Quem tem o token cria leads na sua conta. Trate como uma senha: guarde em variável de ambiente ou no cofre da sua ferramenta e não envie por e-mail nem por chat.
Não coloque o token em JavaScript de página, em HTML nem em app de celular: quem abre o código vê o token. Chame o AceleraZap a partir do seu servidor ou da sua ferramenta de automação.
O token na URL pode ficar registrado em logs de servidor e de proxy. Em chamadas de servidor, envie no cabeçalho Authorization: Bearer SEU_TOKEN.
Crie uma nova conexão em Receber dados, troque o endereço na sua ferramenta e remova a conexão antiga. O endereço antigo deixa de valer. O segredo do webhook de saída se troca em Regenerar, e o antigo para de valer na hora.
Ele lê os leads da conta inteira, ou cria e edita, conforme as permissões. Aparece inteiro só quando é criado e não fica guardado no AceleraZap. Só o administrador da conta cria e revoga. Crie um token por sistema e revogue em Integrações, API de leads, quando não usar mais: o acesso é cortado na hora.
O webhook de saída exige https. Endereços de rede interna, localhost e IPs privados são recusados, e os redirecionamentos não são seguidos.
Não use o IP de origem como prova de que o envio é nosso. A prova é a assinatura HMAC do corpo, conferida com o segredo da sua conta.
Só quem pode editar a área de Integrações ou de Formulários vê o token inteiro. As demais pessoas da equipe veem só o final.
Sobre os leads e as conversas do seu atendimento, o controlador é você e o AceleraZap atua como operador, como explica a Política de Privacidade. Ao enviar dados a outro sistema por webhook, envie só o que o seu atendimento precisa.
Para saber como o AceleraZap trata os dados, leia a Política de Privacidade.
Ela começa com https://app.acelerazap.com.br/api/v1/inbound/capture e termina com ?token= e o seu token. Abra no navegador: um GET com token válido mostra se a conexão está pronta.
Erro 401 é token errado, cortado ou com espaço sobrando. Ele começa com fc_ e tem 35 caracteres.
Resposta 200 com skipped quer dizer que o envio chegou, mas a conexão não tem mapeamento salvo ou está pausada. Volte a Receber dados e conclua o mapeamento.
Enquanto ela escuta, se a conexão ainda não está mapeada ou está pausada, os envios viram amostra (sample true) e não viram lead. Ela se desliga sozinha depois de 15 minutos.
Só o POST cria lead. Corpo vazio dá empty_payload, e envio sem nome, telefone e e-mail dá no_identity.
Precisa ter de 10 a 13 dígitos. Se não tiver, o lead entra sem telefone e sem o botão de WhatsApp.
Criar a conexão e o webhook de saída exigem o plano Pro ou Business. No Starter, a tela mostra o convite para mudar de plano.
Acima do limite de leads do plano, o lead é recebido, mas entra bloqueado no painel.
A resposta com created false quer dizer que o telefone já estava na conta e o lead foi atualizado, não duplicado.
Confira se o endereço usa https, se responde em até 8 segundos, se não redireciona e se o selo não está em Auto-desativado. A lista Últimas entregas mostra o código e o erro de cada tentativa.
Use o segredo atual: depois de Regenerar, o antigo não vale mais. Calcule sobre o corpo cru e compare com o texto completo do cabeçalho, que começa com sha256=.
Se tudo estiver certo e o lead não chegar, abra um chamado em Ajuda e suporte, no painel. Conte o horário do envio e a resposta que a sua ferramenta recebeu.
Sim, liberada a pedido, no plano Business. Com a API liberada na conta, o administrador cria um token em Integrações, API de leads, e o seu sistema lista e consulta os leads, cadastra lead novo e corrige nome, e-mail e mensagem. A API não muda a etapa nem o valor da venda.
Sim, pelos webhooks. Para enviar leads ao AceleraZap, use a ação de requisição HTTP com POST: Webhooks by Zapier, o módulo HTTP do Make ou o nó HTTP Request do n8n. Para receber leads do AceleraZap, use o gatilho de webhook da ferramenta e cole o endereço dele no campo URL do endpoint.
Nos planos Pro e Business. No Starter, a tela mostra o convite para mudar de plano.
Cada envio leva o cabeçalho X-AceleraZap-Signature, com o HMAC SHA256 do corpo calculado com o segredo da sua conta. Você recalcula no seu servidor e descarta o que não bater.
O AceleraZap tenta até 3 vezes por evento. Depois de 20 falhas seguidas, o envio desliga sozinho e os administradores são avisados. O lead continua guardado no painel. Corrija o endereço e clique em Salvar para reativar. Os eventos que aconteceram enquanto o webhook esteve desligado não são enviados depois.
Na entrada, não: o lead é único por conta e telefone, e um novo envio atualiza o lead existente. Na saída, o mesmo evento pode chegar mais de uma vez por causa das tentativas, então ignore o id que você já processou.
Sim. No mapeamento, escolha Etapa do funil e Atendente (dono) para os campos que a sua ferramenta envia. A etapa vale para o lead novo, e o atendente é reconhecido pelo nome ou pelo e-mail cadastrado.
30 envios por minuto por token, e 600 por minuto por origem. Acima disso a resposta é 429, e você tenta de novo depois de um minuto.
Os webhooks de entrada e de saída são do Pro e do Business. O teste gratuito é no plano Starter.
O teste de 14 dias é no plano Starter, sem cartão. Quem escolhe o Pro ou o Business no cadastro paga na hora, sem os dias de teste.