Desenvolvedores
Uma API de verificação de e-mail que simplesmente funciona
Verifique um endereço em tempo real ou envie uma lista inteira como lote. Todas as solicitações usam HTTPS e retornam JSON. Crie chaves de API no seu painel, em Chaves de API.
- REST e JSON
- Callbacks de lote
- Os mesmos créditos do painel
Autenticação
Envie sua chave de API como bearer token no cabeçalho Authorization em todas as solicitações. Mantenha as chaves no seu servidor. Nunca as coloque em código de navegador ou em apps móveis.
Authorization: Bearer YOUR_API_KEY
A URL base de todos os endpoints é https://bouncebell.com/api/v1.
Verificar um endereço
GET https://bouncebell.com/api/v1/verify
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
email | Sim | O endereço a verificar. Codifique-o para URL. |
timeout | Não | Segundos de espera pelo servidor de e-mail, de 3 a 30. Padrão: 10. Se o tempo acabar, o status é unknown e nenhum crédito é usado. |
Exemplo
curl "https://bouncebell.com/api/v1/verify?email=rini.elizabeth%40acme-foods.example" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"email": "rini.elizabeth@acme-foods.example",
"status": "valid",
"reason": "mailbox_exists",
"domain": "acme-foods.example",
"mx_record": "mx1.acme-foods.example",
"disposable": false,
"role": false,
"free_provider": false,
"catch_all": false,
"did_you_mean": null,
"checked_at": "2026-10-30T09:30:12Z",
"credits_used": 1
}
Campos do resultado
| Campo | Tipo | Descrição |
|---|---|---|
email | string | O endereço como você enviou. |
status | string | O veredicto. Veja os status. |
reason | string | Por que chegamos ao veredicto, por exemplo mailbox_not_found ou no_mail_server. |
domain | string | A parte do domínio, em letras minúsculas. |
mx_record | string or null | O servidor de e-mail com a maior prioridade. |
disposable | boolean | True se o domínio for um serviço de caixas temporárias. |
role | boolean | True para caixas compartilhadas como info@ ou support@. |
free_provider | boolean | True para provedores de e-mail gratuitos como o Gmail. |
catch_all | boolean | True quando o domínio aceita qualquer endereço. |
did_you_mean | string or null | Um endereço corrigido quando o domínio parece ter um erro de digitação. |
checked_at | string | Quando a verificação foi feita, em ISO 8601 UTC. |
credits_used | integer | 1, ou 0 quando o status é unknown. |
Status
| Status | Significado | Ação sugerida |
|---|---|---|
valid | A caixa postal existe e aceita e-mails. | Enviar |
invalid | O endereço, o domínio ou a caixa postal não existe. | Remover |
disposable | Um serviço de caixas de e-mail temporárias. | Remover |
catch_all | O domínio aceita todos os endereços, então a caixa postal não pode ser confirmada. | Revisar |
role | Uma caixa compartilhada que existe. | Revisar |
unknown | O servidor de e-mail não deu uma resposta a tempo. Sem cobrança. | Tente mais tarde |
Lotes
Envie até 100.000 endereços em uma única solicitação. O lote é processado em segundo plano; consulte o status ou informe uma callback_url e nós a chamaremos quando o lote terminar.
Criar um lote
POST https://bouncebell.com/api/v1/batches
curl -X POST "https://bouncebell.com/api/v1/batches" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "October import", "emails": ["a@example.com", "b@example.com"],
"callback_url": "https://yourapp.example/hooks/bouncebell"}'
{ "id": "bat_8f2k1q3m9x7w4p", "status": "queued", "total": 2, "done": 0 }
Os créditos de cada endereço único são reservados quando o lote é criado, e os resultados desconhecidos são reembolsados quando ele termina. O callback recebe um POST com {"event": "batch.completed", "batch_id": "...", "status": "done", "counts": {...}}. As URLs de callback devem usar HTTPS.
Consultar o progresso
GET https://bouncebell.com/api/v1/batches/{id}
{ "id": "bat_8f2k1q3m9x7w4p", "status": "running", "total": 2, "done": 1 }
O status é queued, running ou done. Quando é done, a resposta também traz counts por status.
Baixar resultados
GET https://bouncebell.com/api/v1/batches/{id}/results
Retorna JSON por padrão. Adicione ?format=csv para receber um arquivo CSV. Cada linha tem os mesmos campos de uma verificação individual.
Créditos
GET https://bouncebell.com/api/v1/credits
{ "credits_remaining": 33420 }
Erros e limites
Os erros retornam um corpo JSON com um código error e uma message legível.
| Código HTTP | Erro | O que fazer |
|---|---|---|
| 400 | bad_request | Um parâmetro está faltando ou incorreto. Leia a mensagem. |
| 401 | invalid_key | Confira se a chave está correta e não foi revogada. |
| 402 | no_credits | Compre mais créditos. |
| 403 | email_not_confirmed | Abra o link de confirmação que enviamos por e-mail quando você se cadastrou. |
| 404 | not_found | O lote não existe ou foi excluído após 30 dias. |
| 429 | rate_limited | Vá mais devagar. Aguarde os segundos indicados no cabeçalho Retry-After. |
| 500 | server_error | Tente de novo após um breve intervalo. Se continuar, fale com o suporte. |
As verificações individuais são limitadas a 20 solicitações por segundo por chave. Fale com a gente se precisar de mais.