Nesta páginaResumo dos caminhos

01Resumo dos caminhos

Há dois sentidos. Na entrada, o seu sistema envia leads ao AceleraZap. Na saída, o AceleraZap envia os leads ao seu sistema. Escolha pelo que você quer fazer.
Como os dados circulam entre o seu sistema e o AceleraZapDa esquerda para a direita. Seu formulário, CRM ou ferramenta de automação envia o lead ao AceleraZap por um POST, o webhook de entrada. O lead entra no funil do AceleraZap. Quando ele é criado, atualizado ou muda de etapa, o AceleraZap envia um POST assinado, o webhook de saída, ao seu CRM, planilha ou sistema.Seu sistemaformulário, CRM,n8n, Make, ZapierAceleraZaplead único portelefone, no funilSeu destinoCRM, planilha ouqualquer sistemaentradasaída

Entrada: POST do seu sistema para o endereço com token. Saída: POST assinado do AceleraZap para o endereço que você cadastrou.

QueroUse istoPlano
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 sistemaWebhook de saída, com assinaturaPro ou Business
Ter os leads como linhas numa planilha do GoogleGoogle Sheets, pelo Apps ScriptPro ou Business
Captar leads no meu siteWidget, formulários, link curto e chat do siteWidget em todos os planos. Formulários hospedados no Pro ou Business
Devolver a venda, com o valor, ao Google Ads e à MetaConversion Bridge e Conversions APIBusiness
Medir os leads no Google Analytics 4ID de medição do GA4Pro ou Business. O envio direto do AceleraZap é do Business
Consultar, criar ou editar leads a partir do meu sistemaAPI de leads, com tokenLiberada a pedido, no plano Business

02Receber leads no AceleraZap

É o webhook de entrada. Um formulário seu, um CRM ou uma ferramenta como n8n, Make e Zapier faz um POST em um endereço do AceleraZap, e o lead entra no funil, igual aos leads do widget.

Como conseguir o endereço no painel

Tela Receber por webhook do painel do AceleraZap, sem nenhuma conexão ainda, com os botões + Novo webhook e + Conectar CRM/webhook.
Integrações → Webhook → Receber dadosA aba Receber dados antes da primeira conexão.
  1. 1

    Abra a tela do webhook

    No painel, entre em Integrações e escolha o cartão Webhook. Abra a aba Receber dados.

    Integrações → Webhook → Receber dados

  2. 2

    Crie a conexão

    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.

  3. 3

    Copie a URL de recebimento

    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.

  4. 4

    Envie um teste e detecte os campos

    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.

  5. 5

    Diga o que é cada campo

    Clique em Concluir e mapear. Para cada campo escolha: Nome, WhatsApp, E-mail, Mensagem, Etapa do funil, Atendente (dono), Extra ou Ignorar.

  6. 6

    Ative

    Clique em Salvar e ativar captura. A partir daí, cada envio vira um lead no funil.

Primeiro passo do assistente de conexão: o campo Nome da captura e o botão Continuar, com as etapas 1 Nome, 2 Conectar e 3 Mapear no topo.
Integrações → Webhook → Receber dados → + Novo webhookO assistente tem três etapas: Nome, Conectar e Mapear.

Enviar um lead

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
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"}'

O que cada campo vira

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 painelO que faz
NomeVira o nome do lead. Vários campos de nome se juntam, como nome e sobrenome.
WhatsAppVira o telefone. É ele que identifica o lead.
E-mailVira o e-mail. Se o formato for inválido, o e-mail é descartado e o lead entra mesmo assim.
MensagemTexto livre da pessoa, sem rótulo.
Etapa do funilColoca 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.
ExtraAparece em Dados do formulário, com o rótulo que você escolher.
IgnorarO campo é descartado.

Testar sem criar lead

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
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.", ...}

O que o AceleraZap responde

CódigoRespostaO 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.

Limites

ItemValor
Formatos aceitosJSON, x-www-form-urlencoded e multipart/form-data
MétodoPOST. O GET na mesma URL só testa o token e não cria lead
Autenticaçãotoken na URL (?token=) ou no cabeçalho Authorization: Bearer
Formato do tokencomeça com fc_ e tem 35 caracteres
Velocidade30 envios por minuto por token e origem, e 600 por minuto por origem
Campos lidosaté 80 campos por envio, e cada valor é cortado em 2.000 caracteres. Objetos aninhados viram chaves com colchetes, como form[email]
Tamanho do corpoaté 64 KB. Acima disso o servidor responde 413. Como 80 campos de 2.000 caracteres passam desse tamanho, vale o limite menor
Nomeaté 120 caracteres
E-mailaté 160 caracteres e formato válido
Telefonede 10 a 13 dígitos, com ou sem 55 e máscara. Fora disso, o lead entra sem telefone
Mensagematé 1.500 caracteres, somando a mensagem e os campos extras

E se o lead já existir

  • O lead é único por conta e telefone. O telefone é comparado só pelos dígitos, sem o 55: 27999998888 e +55 (27) 99999-8888 são a mesma pessoa.
  • Se o telefone já existe, o envio atualiza o lead e a resposta traz created false. Nome, e-mail e mensagem novos substituem os antigos, e se o envio vier sem nome o lead passa a se chamar pelo e-mail ou pelo telefone. A etapa enviada é ignorada, e a origem do primeiro contato é mantida.
  • Sem telefone, o lead é reconhecido pelo e-mail. Sem telefone e sem e-mail, cada envio cria um lead novo.
  • Cada lead novo conta no limite de leads do mês do seu plano. Acima do limite, o lead entra bloqueado no painel e a resposta continua sendo 200.
Contas que já usam a chave do webhook legado

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.

CampoRegra
nameobrigatório
phoneobrigatório, com pelo menos 10 dígitos
emailopcional
messageopcional
urlopcional, a página de origem
sourceopcional, vira uma linha Origem na mensagem
deal_stageopcional, a etapa em que o lead NOVO nasce
deal_useropcional, nome ou e-mail do atendente dono
curl
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
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"}'

03Enviar leads do AceleraZap para o seu sistema

É o webhook de saída. Quando um lead é criado, atualizado ou muda de etapa, o AceleraZap faz um POST no endereço que você cadastrou, com o lead completo e uma assinatura para você conferir que o envio é nosso.

Como configurar no painel

Tela Integração via Webhook do painel, ainda não configurada: o campo URL do endpoint, os três eventos Lead criado, Lead atualizado e Etapa do lead mudou, a caixa Webhook ativo e o botão Criar webhook.
Integrações → Webhook → Enviar dadosO formulário do webhook de saída. A seção Como receber e validar, no pé da tela, traz o resumo técnico.
  1. 1

    Abra a tela do webhook

    No painel, entre em Integrações, escolha o cartão Webhook e fique na aba Enviar dados.

    Integrações → Webhook → Enviar dados

  2. 2

    Informe o endereço do seu sistema

    No campo URL do endpoint, cole o endereço que vai receber o POST. Ele precisa começar com https://.

  3. 3

    Escolha os eventos

    Marque Lead criado, Lead atualizado e Etapa do lead mudou, conforme o que o seu sistema precisa. Por padrão vem só Lead criado.

  4. 4

    Crie o webhook e guarde o segredo

    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.

  5. 5

    Envie um teste

    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.

Os eventos

No painelValor enviadoQuando sai
Lead criadolead.createdNa 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 atualizadolead.updatedO 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 mudoulead.status_changedQuando 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çalhos de cada envio

CabeçalhoValorPara quê
Content-Typeapplication/jsonO corpo é sempre JSON.
User-AgentAceleraZap-Webhook/1.0Identifica o envio nos seus registros.
X-AceleraZap-Eventlead.createdO evento, o mesmo do campo event do corpo.
X-AceleraZap-Signaturesha256=<hex do HMAC>A assinatura do corpo. Veja como conferir logo abaixo.
X-AceleraZap-Deliveryevt_...O id do evento. É o mesmo do campo id do corpo e se repete em cada nova tentativa.
X-AceleraZap-TesttrueSó no botão Enviar teste.
X-AceleraZap-RetrymanualSó quando alguém clica em Reenviar no painel.

O corpo do envio

O corpo é sempre JSON, com o lead inteiro. Este é um lead.created. Os outros eventos têm o mesmo desenho, mudando event e changes.

JSON
{
  "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"
  }
}

Os campos principais

CampoTipoO que é
idtextoO id do evento, no formato evt_... Igual ao cabeçalho X-AceleraZap-Delivery. Use para ignorar repetidos.
eventtextolead.created, lead.updated ou lead.status_changed.
createdAtdata ISO 8601Quando o evento foi gerado.
accountobjetoO id e o nome da sua conta.
lead.idtextoO id do lead. Não muda em nenhum evento: use para criar ou atualizar no seu sistema.
lead.phonetextoSó dígitos, com DDD e sem o 55. Vazio quando o lead não tem telefone.
lead.phoneE164texto ou nullO mesmo telefone no formato internacional, como +5527999998888. Vem null quando o número não é um telefone brasileiro completo.
lead.emailtextoVazio quando o lead não informou e-mail.
lead.statustextoUma das chaves da tabela de etapas abaixo. É sempre uma delas, mesmo que você renomeie a etapa no funil.
lead.stageIdtexto ou nullA 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.stageNametextoO nome que você deu à etapa. Nunca vem vazio.
lead.dealValueinteiro ou nullO valor do negócio em centavos. 199050 é R$ 1.990,50. Vem null enquanto ninguém anotou o valor.
lead.dealValueBRLnúmero ou nullO mesmo valor em reais, como 1990.5. Use um dos dois, nunca some.
lead.dealClosedAtdata ou nullQuando a venda foi fechada.
lead.attributionobjetoOrigem do anúncio: gclid, fbclid, ctwaClid, UTMs e a campanha. O nome da campanha pode chegar um pouco depois do primeiro evento.
lead.assignedSellerobjeto ou nullO atendente dono do lead agora, com id e name.
lead.tagslista de textosOs nomes das etiquetas, até 50.
lead.lostReasontexto ou nullO 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.origintextoform, form_capture, import ou other.
lead.qualificationAnswerslistaAs respostas às perguntas do widget, cada uma com questionId, label e value.
changesobjeto ou nullNo 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.

Valores de lead.status

Valor enviadoNome no painelSignifica
newNovoLead acabou de chegar, ainda não foi contatado
contactedContatadoPrimeiro contato feito
qualifiedQualificadoLead com perfil/interesse confirmado
negotiatingEm negociaçãoProposta em andamento
waitingAguardando retornoEsperando resposta do lead
wonFechadoVirou cliente / venda concluída
post_salePós-vendaAcompanhamento depois da venda
supportSuporteAtendimento / suporte
renewalRenovaçãoRenovação / recompra
lostPerdidoLead não avançou
disqualifiedDesqualificadoLead 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.

Como conferir a assinatura

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 ciclo da assinatura do webhook de saídaEm quatro etapas. Primeiro o AceleraZap monta o corpo JSON do evento. Depois calcula o HMAC SHA256 desse corpo com o segredo da sua conta e coloca o resultado no cabeçalho X-AceleraZap-Signature. O seu servidor recebe o corpo e o cabeçalho, calcula o HMAC do corpo cru com o mesmo segredo e compara. Se for igual, responde 200. Se for diferente, responde 401 e descarta.1. Corpoo AceleraZap montao JSON do evento2. AssinaHMAC SHA256 do corpocom o seu segredo3. Confereseu servidor refaz ocálculo no corpo cru4. Respondeigual: 200 e seguediferente: 401 e descartaassinaPOSTcompara

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);
}

Tentativas e desativação automática

ItemComo funciona
Tentativas por eventoaté 3. A primeira é imediata, a segunda espera 1 segundo e a terceira, 5 segundos
Tempo limite8 segundos por tentativa
O que conta como sucessoqualquer resposta 2xx
Quando não tenta de novoresposta 4xx (menos 408 e 429) e redirecionamento 3xx. O redirecionamento não é seguido e conta como falha
Quando tenta de novotempo esgotado, falha de conexão, 5xx, 408 e 429
Falha do eventoo 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
Avisoos administradores da conta são avisados quando as falhas chegam à metade do limite e quando o webhook desliga
Desativação automáticadepois de 20 falhas seguidas o webhook desliga sozinho e o selo Auto-desativado aparece na tela
Como reativarcorrija 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

Boas práticas

Responda 2xx rápido

Você tem 8 segundos. Confira a assinatura, guarde o evento, responda 200 e processe depois.

Ignore o que você já processou

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.

Crie ou atualize pelo lead.id

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.

Não dependa da ordem

Os eventos saem separados e podem chegar em ordem diferente. Use createdAt e lead.lastActivityAt para saber qual é o mais novo.

Confira a assinatura no corpo cru

Calcule o HMAC sobre os bytes exatos que chegaram. Se você ler o JSON e gravar de novo, a assinatura deixa de bater.

04API de leads: consultar, criar e editar

Com um token, o seu sistema lista os leads da conta, consulta um lead, cadastra lead novo e corrige nome, e-mail e mensagem. Cada lead sai com os mesmos campos do corpo do webhook de saída.

Como conseguir o token

  1. 1

    Crie o token

    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

  2. 2

    Copie o token na hora

    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.

  3. 3

    Envie no cabeçalho

    Toda chamada leva o cabeçalho Authorization: Bearer seguido do token. Token na URL não é aceito.

Endereços

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çoPermissãoO que faz
GET /api/v1/public/leadsleads:readLista os leads da conta, do mais novo para o mais antigo, com filtros e páginas.
GET /api/v1/public/leads/{id}leads:readUm lead pelo id.
POST /api/v1/public/leadsleads:writeCadastra 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:writeCorrige nome, e-mail e mensagem de um lead.

Listar e paginar

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âmetroComo usar
limitquantos leads por página, de 1 a 100. Sem ele, 50
cursoro nextCursor da resposta anterior, sem alterar. Sem ele, a primeira página
statusuma das chaves de lead.status, como new, qualified ou won
createdFromcriados a partir desta data. Aceita 2026-10-01 (horário de Brasília) ou data e hora com fuso
createdTocriados antes desta data. Só com o dia, o dia inteiro entra
phoneo telefone exato do lead, com DDD. Com ou sem 55 e máscara
emailo 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..."}

Criar e editar

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.

CampoRegra
nameobrigatório no POST, até 120 caracteres
phoneobrigatório no POST, com pelo menos 10 dígitos. Não muda pelo PATCH: é ele que identifica o lead
emailopcional, formato válido. No PATCH, null apaga
messageopcional, até 2.000 caracteres. No PATCH, null apaga
urlopcional, só no POST: a página de origem
sourceopcional, só no POST: vira uma linha Origem na mensagem
CasoO que acontece
Telefone que já existeo 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 messagenã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 leadso 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
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
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", ...}}

Erros

Todo erro vem como { "error": { "code": "...", "message": "..." } }. O code não muda; a mensagem é para pessoas e pode mudar.

HTTPcodeO que significa
401unauthorizedToken ausente ou inválido. Envie o cabeçalho Authorization: Bearer com um token ativo, criado em Integrações, API de leads.
403plan_requiredO plano atual da conta não inclui a API de leads. Ela é do plano Business.
403account_blockedO acesso da conta está suspenso por cobrança. Regularize em Faturamento, no painel, para voltar a usar a API.
403insufficient_scopeEste token não tem permissão para esta operação.
403lead_lockedEste 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.
404lead_not_foundLead não encontrado nesta conta.
400stage_not_supportedEsta 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.
400invalid_jsonO corpo não é um JSON válido.
400validation_failedAlgum campo está fora do formato.
400invalid_phoneO telefone precisa ter pelo menos 10 dígitos, com DDD.
400invalid_emailO e-mail não tem um formato válido.
400invalid_queryAlgum parâmetro da busca está fora do formato.
413payload_too_largeO corpo passou do limite de 16 KB.
415unsupported_media_typeEnvie o corpo como JSON, com o cabeçalho Content-Type: application/json.
429rate_limitedMuitas requisições. O limite é de 60 por minuto por token. Espere os segundos do cabeçalho Retry-After e tente de novo.
429too_many_failed_attemptsO 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.
500internal_errorErro 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.

Limites

ItemValor
PlanoLiberada 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çãocabeçalho Authorization: Bearer com o token. Na URL não vale
Formato do tokencomeça com azp_ e tem 47 caracteres
Velocidade60 chamadas por minuto por token. Acima disso, 429 rate_limited com o cabeçalho Retry-After
Token inválidodepois 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áginaaté 100 leads, 50 se você não disser
CorpoJSON, até 16 KB
Navegadora API não responde a páginas de site (sem CORS). Chame do seu servidor ou da sua ferramenta de automação
Leads bloqueadoso lead que passou do limite do plano não aparece na lista e, pelo id, responde lead_locked
Atendenteso token vale para a conta inteira, sem o recorte por atendente do painel

05Exemplo completo, de ponta a ponta

Um formulário próprio, numa página de captação, cria o lead no AceleraZap. Um CRM recebe a venda fechada, com o valor.
  1. 1

    O visitante preenche o formulário da sua página

    O formulário é seu, feito como você quiser. Ele envia nome, WhatsApp e mensagem para o seu servidor.

  2. 2

    O seu servidor envia o lead ao AceleraZap

    Um POST na URL de recebimento, com o token guardado em variável de ambiente. O token nunca vai para o navegador.

  3. 3

    O lead aparece no funil

    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.

  4. 4

    O atendente fecha a venda no painel

    Ele move o lead para Fechado. Isso gera o evento lead.status_changed, com o valor se ele já tiver sido anotado antes.

  5. 5

    O atendente anota o valor

    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.

  6. 6

    O AceleraZap avisa o seu CRM

    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.

Passo 2: o seu servidor envia o lead

Node.js
// 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 });
});

Passo 6: o seu CRM recebe a venda

Node.js
// 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.
    }
  },
);

06Outros caminhos que existem

Nem tudo passa por webhook. Estes caminhos já vêm prontos, sem você programar a chamada.

Captura no site

Widget

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

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.

Link curto e página de bio

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.

Chat do site

Uma conversa no próprio site que vira lead e entra na caixa de conversas.

Google Sheets, pelo Apps Script

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.

  1. 1

    Abra a tela do Google Sheets

    No painel, entre em Integrações e escolha o cartão Google Sheets.

    Integrações → Google Sheets

  2. 2

    Cole o script na sua planilha

    Na planilha, vá em Extensões → Apps Script e cole o script que a tela mostra.

  3. 3

    Publique como app da Web

    Clique em Implantar → Nova implantação e publique como app da Web. Copie o endereço que termina em /exec.

  4. 4

    Cole o endereço no AceleraZap

    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.

Conversões para anúncios

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.

Google Ads, venda de volta

A partir do Business

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

Meta, Conversions API

A partir do Business

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

Google Analytics 4

A partir do Pro

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.

Conexão só pelo painel

WhatsApp

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.

07O que ainda não existe

Isto não está disponível hoje. Os itens com o selo Em breve ainda não foram liberados.

Etapa e valor pela API de leads

Não existe hoje

A API de leads não muda a etapa do funil nem o valor da venda. Isso é feito no painel.

SDKs e bibliotecas

Não existe hoje

Não há pacotes prontos para Node, Python ou PHP. Os exemplos desta página usam só HTTP.

App do AceleraZap no Zapier

Em breve

Hoje o Zapier se conecta pelo webhook de entrada e pelo de saída.

RD Station

Em breve

Integração nativa com o RD Station. Hoje, envie os leads pelo webhook de saída ou por uma ferramenta de automação.

Pipedrive

Em breve

Integração nativa com o Pipedrive. Hoje, use o webhook de saída ou uma ferramenta de automação.

08Segurança e LGPD

Com o token, qualquer pessoa cria leads na sua conta. Com o segredo, qualquer pessoa assina um envio como se fosse do AceleraZap. Cuide dos dois como cuida de uma senha.

O token é da sua conta

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.

Nunca no front-end

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.

Prefira o cabeçalho

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.

Como trocar o 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.

O token da API de leads

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.

Só HTTPS, só destino público

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.

Confira a assinatura, não o IP

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.

Quem vê o token e o segredo

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.

LGPD

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.

09Limites e erros comuns

O lead não chegou? Siga a lista na ordem. Os códigos de resposta estão na seção Receber leads.
  1. 1

    A URL está completa?

    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.

  2. 2

    O token está certo?

    Erro 401 é token errado, cortado ou com espaço sobrando. Ele começa com fc_ e tem 35 caracteres.

  3. 3

    A conexão está mapeada e ativa?

    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.

  4. 4

    A detecção de campos ficou ligada?

    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.

  5. 5

    O método e o corpo estão certos?

    Só o POST cria lead. Corpo vazio dá empty_payload, e envio sem nome, telefone e e-mail dá no_identity.

  6. 6

    O telefone é válido?

    Precisa ter de 10 a 13 dígitos. Se não tiver, o lead entra sem telefone e sem o botão de WhatsApp.

  7. 7

    O plano permite?

    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.

  8. 8

    O limite de leads do mês acabou?

    Acima do limite de leads do plano, o lead é recebido, mas entra bloqueado no painel.

  9. 9

    O lead já existia?

    A resposta com created false quer dizer que o telefone já estava na conta e o lead foi atualizado, não duplicado.

  10. 10

    O webhook de saída não chega?

    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.

  11. 11

    A assinatura não bate?

    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.

10Perguntas frequentes

O AceleraZap tem uma API para consultar meus leads?

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.

Funciona com Zapier, Make e n8n?

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.

Em qual plano ficam o webhook de entrada e o de saída?

Nos planos Pro e Business. No Starter, a tela mostra o convite para mudar de plano.

Como sei que o envio veio do AceleraZap?

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.

E se o meu servidor ficar fora do ar?

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.

O mesmo lead pode chegar duas vezes?

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.

Posso mandar a etapa do funil e o atendente no envio?

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.

Qual é o limite de envios?

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.

Leve os seus leads para onde a sua equipe trabalha

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.

Veja também