Documentação da API
Envie um CPF ou CNPJ e receba os telefones relacionados, já ordenados do maior para o menor score. Uma requisição HTTP, resposta em JSON.
curl -H "Authorization: Bearer SUA_API_KEY" "https://api.addlead.com.br/doc_number/12345678909"
Visão geral
| Base URL | https://api.addlead.com.br |
|---|---|
| Protocolo | HTTPS obrigatório |
| Formato | application/json; charset=utf-8 |
| Métodos | GET, HEAD e OPTIONS |
| Autenticação | API key (por header ou query string) |
| Cache | no-store — a resposta traz CPF/CNPJ e telefones |
Não há SDK a instalar nem sessão a manter: qualquer linguagem que faça uma requisição HTTP integra com o addLead. Na prática, isso torna a API compatível com CRMs, PABX e discadores como Asterisk e VICIdial.
Autenticação
Toda consulta exige uma API key. Você pode enviá-la de três formas — a primeira encontrada é usada, nesta ordem:
| Forma | Como enviar |
|---|---|
| Query string | ?api_key=SUA_API_KEY |
| Header | X-Api-Token: SUA_API_KEY |
| Header | Authorization: Bearer SUA_API_KEY |
A API key tem de 8 a 128 caracteres, entre letras, números, hífen e sublinhado
(^[A-Za-z0-9\-_]{8,128}$). Chaves no formato legado
(999999A-AAAA-9999-AA99-A9999A9999AA) continuam válidas, e a caixa das letras
não importa. O header X-Api-Token mantém esse nome por compatibilidade.
Prefira enviar a API key por header. A query string costuma ser gravada em logs de acesso, proxies e no histórico do navegador — o header, não.
Ainda não tem uma API key? Solicite o acesso e a chave é enviada por e-mail. Suas API keys ficam disponíveis no portal do cliente.
Consultar documento
Retorna os telefones relacionados a um CPF ou CNPJ.
Parâmetro de caminho
| Parâmetro | Tipo | Descrição |
|---|---|---|
documento |
string |
CPF ou CNPJ com somente dígitos. Pontuação não é aceita na URL —
103.701.976-36 deve ser enviado como 10370197636.
Zeros à esquerda são desconsiderados na busca, mas isso é transparente: o campo
document da resposta devolve exatamente o que você enviou.
Não há validação de tamanho nem de dígito verificador.
|
Uma URL com pontuação, espaço ou letra não chega ao serviço de consulta: a rota não casa e
a resposta é 404 Not Found. Limpe o documento antes de montar a URL.
Exemplos
curl -H "Authorization: Bearer SUA_API_KEY" "https://api.addlead.com.br/doc_number/12345678909"
curl "https://api.addlead.com.br/doc_number/12345678909?api_key=SUA_API_KEY"
const doc = "12345678909";
const res = await fetch(`https://api.addlead.com.br/doc_number/${doc}`, {
headers: { "X-Api-Token": process.env.ADDLEAD_API_KEY },
});
const data = await res.json();
if (!res.ok) {
throw new Error(`addLead ${res.status}: ${data.error}`);
}
console.log(data.count, data.phones);
$doc = '12345678909';
$ch = curl_init("https://api.addlead.com.br/doc_number/{$doc}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-Api-Token: ' . getenv('ADDLEAD_API_KEY')],
CURLOPT_TIMEOUT => 10,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
$data = json_decode($body, true);
if ($status !== 200) {
throw new RuntimeException("addLead {$status}: {$data['error']}");
}
print_r($data['phones']);
import os
import requests
doc = "12345678909"
res = requests.get(
f"https://api.addlead.com.br/doc_number/{doc}",
headers={"X-Api-Token": os.environ["ADDLEAD_API_KEY"]},
timeout=10,
)
data = res.json()
if res.status_code != 200:
raise RuntimeError(f"addLead {res.status_code}: {data['error']}")
print(data["count"], data["phones"])
Resposta
Sucesso — 200 OK
{
"document": "12345678909",
"phones": ["31999999999", "31999999998", "31999999997"],
"count": 3
}
| Campo | Tipo | Descrição |
|---|---|---|
document | string | O documento exatamente como você enviou, para servir de chave de correlação. |
phones | array | Telefones encontrados, ordenados do maior para o menor score. |
count | integer | Quantidade de telefones retornados. |
Sem resultado — 200 OK
Um documento sem telefones na base não é erro: a resposta é 200 com lista vazia.
{ "document": "12345678909", "phones": [], "count": 0 }
Use count para decidir o fluxo e document como chave de
correlação — ele volta idêntico ao que você mandou, então casa direto com a sua base.
Erros
Todo erro retorna JSON no formato {"error": "<mensagem>"}.
| Status | Mensagem | Quando acontece |
|---|---|---|
| 401 | API key ausente ou inválida | Chave não enviada ou fora do formato aceito. |
| 401 | API key inválida | Chave no formato correto, mas inexistente. |
| 403 | Acesso desativado, entre em contato | Chave desativada. |
| 429 | Limite excedido, entre em contato | Saldo ou limite do plano esgotado. |
| 404 | Not Found | Rota inexistente — inclusive documento com caracteres não numéricos. |
| 405 | Método não permitido | A rota existe, mas o método não é aceito. Vem com o header Allow. |
| 503 | Service unavailable | Limite de requisições por segundo atingido ou indisponibilidade temporária. |
{ "error": "API key inválida" }
As respostas 401 acompanham o header
WWW-Authenticate: Bearer realm="addlead". Erros gerados antes da aplicação,
pelo servidor web, não seguem esse formato JSON: URI longa demais responde
414 e caractere de controle na URL responde 400, ambos em HTML.
Limites de uso
-
30 requisições por segundo por IP. Acima disso o servidor responde
503até a taxa normalizar. Para volumes altos, distribua as consultas ao longo do tempo, use a consulta em lote ou fale com a gente sobre um limite dedicado. -
Consulta sem resultado não consome crédito. Um
200comcount: 0não desconta nada do seu saldo. -
Saldo esgotado. Quando o saldo acaba, a API passa a responder
429. O saldo é da conta: todas as suas API keys consomem do mesmo pool. Acompanhe o consumo e o saldo no portal do cliente; para comprar mais volume, fale com a nossa equipe. -
O que não conta.
HEAD,OPTIONSe respostas404ou405não entram no seu consumo. - Timeout. A consulta responde em poucos milissegundos; um timeout de 10 segundos no seu cliente é folgado o bastante.
Métodos
Os endpoints aceitam GET, HEAD e OPTIONS. Qualquer
outro método em uma rota existente responde 405 com o header
Allow: GET, HEAD, OPTIONS — enquanto uma rota inexistente responde
404, para não confirmar quais rotas existem.
| Requisição | Resposta |
|---|---|
GET /doc_number/12345678909 | 200 com os telefones |
HEAD /doc_number/12345678909 | Mesmo status do GET, sem corpo |
OPTIONS /doc_number/12345678909 | 204 sem corpo, com Allow |
POST /doc_number/12345678909 | 405 — a rota existe, o método não é aceito |
POST /rota-inexistente | 404 |
HEAD /doc_number/{documento} valida a API key e devolve o mesmo status que o
GET devolveria (200, 401 ou 403), mas
não executa a consulta e não consome crédito — é a forma barata de
conferir se a chave está ativa. Como o GET responde 200 tanto
com telefones quanto sem, o 200 do HEAD não indica que o
documento tem resultado.
curl -I -H "Authorization: Bearer SUA_API_KEY" "https://api.addlead.com.br/doc_number/12345678909"
Consulta em lote
Para enriquecer uma base inteira sem escrever código, existe a consulta em lote: fale com a nossa equipe para habilitar. O envio é feito pelo portal do cliente, na aba Arquivos. O processamento é assíncrono — você envia o arquivo, ele é processado em segundo plano e o resultado fica disponível para download.
| Entrada | Arquivo .txt ou .csv, um documento por linha. |
|---|---|
| Limite | Até 1.000.000 de linhas por arquivo. |
| Saída | CSV com o documento seguido dos telefones, um por coluna. |
| Retenção | O arquivo de resultado fica disponível por 60 dias. |
| Aviso | Opcionalmente, um e-mail avisa quando o processamento terminar. |
Arquivo enviado
10370197636
10421945822
15765863589
Arquivo devolvido
10370197636,31971807969,31979521597,31951462597
10421945822,31989751325
15765863589
O documento sai exatamente como você enviou — inclusive com zeros à esquerda e formatação. Assim cada linha do resultado casa direto com a linha original da sua base. Documentos sem telefone aparecem sozinhos na linha.
Boas práticas
- Guarde a API key fora do código. Use variável de ambiente ou cofre de segredos — nunca versione a chave no repositório.
- Limpe o documento antes de montar a URL. Remova pontos, traços, barras e espaços; envie apenas dígitos.
- Trate o 200 com
count: 0. É o caso mais comum depois do sucesso e não deve virar exceção na sua aplicação. - Faça retry com backoff no
503. Espere e tente de novo em vez de repetir na mesma taxa que gerou o bloqueio. - Não faça retry em
401,403e429. São questões de credencial ou de plano — repetir não resolve. - Use
HEADpara checar a credencial. Valida a API key sem consumir crédito — melhor que gastar uma consulta real só para testar.
Suporte
Dúvidas de integração, limite dedicado ou volume maior: fale com a nossa equipe. Você também pode abrir um chamado direto pelo portal.