API Reference
Complete email checker API reference. Endpoints, parameters, response codes for email verification and validation.
A API EmailVerify é um serviço RESTful que fornece recursos poderosos de verificação de email. Todas as requisições da API devem ser feitas via HTTPS.
URL Base
https://api.emailverify.ai/v1Autenticação
Todas as requisições da API requerem autenticação usando um token Bearer no cabeçalho Authorization:
Authorization: Bearer YOUR_API_KEYObtenha sua chave de API no painel EmailVerify.
Exemplo
curl -X POST https://api.emailverify.ai/v1/verify \
-H "Authorization: Bearer bv_live_xxx" \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com"}'Limites de Taxa
| Plano | Requisições/Hora | Requisições/Dia |
|---|---|---|
| Gratuito | 100 | 1.000 |
| Inicial | 1.000 | 10.000 |
| Profissional | 10.000 | 100.000 |
| Empresarial | Personalizado | Personalizado |
Informações sobre limites de taxa são incluídas nos cabeçalhos de resposta:
| Cabeçalho | Descrição |
|---|---|
X-RateLimit-Limit | Requisições máximas permitidas |
X-RateLimit-Remaining | Requisições restantes na janela |
X-RateLimit-Reset | Timestamp Unix quando o limite será resetado |
Quando o limite de taxa for excedido, você receberá uma resposta 429 Too Many Requests:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later.",
"retry_after": 3600
}
}Endpoints
Verificação de Email Único
Verifica um único endereço de email com resultados detalhados.
POST /verifyRequisição
{
"email": "user@example.com",
"smtp_check": true,
"timeout": 5000
}Parâmetros
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
email | string | Sim | - | Endereço de email para verificar |
smtp_check | boolean | Não | true | Realizar verificação de caixa de correio SMTP |
timeout | integer | Não | 5000 | Tempo limite da requisição em milissegundos (máx: 30000) |
Resposta
{
"email": "user@example.com",
"status": "valid",
"result": {
"deliverable": true,
"valid_format": true,
"valid_domain": true,
"valid_mx": true,
"disposable": false,
"role": false,
"catchall": false,
"free": false,
"smtp_valid": true
},
"score": 0.95,
"reason": null,
"credits_used": 1
}Campos da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
email | string | O endereço de email verificado |
status | string | Status da verificação: valid, invalid, unknown, accept_all |
result | object | Resultados detalhados da verificação |
score | number | Pontuação de confiança (0.0 - 1.0) |
reason | string | Motivo para status inválido/desconhecido (pode ser nulo) |
credits_used | integer | Número de créditos consumidos |
Campos do Objeto Result
| Campo | Tipo | Descrição |
|---|---|---|
deliverable | boolean | Se o email pode receber mensagens |
valid_format | boolean | Se o email tem sintaxe válida |
valid_domain | boolean | Se o domínio existe |
valid_mx | boolean | Se o domínio tem registros MX |
disposable | boolean | Se o email é de um serviço descartável |
role | boolean | Se o email é baseado em função (info@, support@) |
catchall | boolean | Se o domínio aceita todos os emails |
free | boolean | Se o email é de um provedor gratuito |
smtp_valid | boolean | Se a verificação SMTP passou |
Verificação em Massa de Emails
Envie múltiplos endereços de email para verificação. Retorna um ID de trabalho para rastreamento do progresso.
POST /verify/bulkRequisição
{
"emails": [
"user1@example.com",
"user2@example.com",
"user3@example.com"
],
"smtp_check": true,
"webhook_url": "https://your-app.com/webhooks/emailverify"
}Parâmetros
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
emails | array | Sim | - | Array de endereços de email (máx: 10.000) |
smtp_check | boolean | Não | true | Realizar verificação SMTP |
webhook_url | string | Não | - | URL para receber notificação de conclusão |
Resposta
{
"job_id": "job_abc123xyz",
"status": "processing",
"total": 3,
"processed": 0,
"valid": 0,
"invalid": 0,
"unknown": 0,
"credits_used": 3,
"created_at": "2025-01-15T10:30:00Z"
}Obter Status do Trabalho em Massa
Verifica o status de um trabalho de verificação em massa.
GET /verify/bulk/{job_id}Resposta (Em Andamento)
{
"job_id": "job_abc123xyz",
"status": "processing",
"total": 1000,
"processed": 450,
"valid": 380,
"invalid": 50,
"unknown": 20,
"progress_percent": 45,
"created_at": "2025-01-15T10:30:00Z"
}Resposta (Concluído)
{
"job_id": "job_abc123xyz",
"status": "completed",
"total": 1000,
"processed": 1000,
"valid": 850,
"invalid": 100,
"unknown": 50,
"progress_percent": 100,
"created_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:35:00Z"
}Valores de Status do Trabalho
| Status | Descrição |
|---|---|
pending | Trabalho está na fila |
processing | Trabalho está sendo processado |
completed | Trabalho concluído com sucesso |
failed | Trabalho falhou (veja o campo de erro) |
Obter Resultados do Trabalho em Massa
Recupera os resultados de verificação de um trabalho em massa concluído.
GET /verify/bulk/{job_id}/resultsParâmetros de Query
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
limit | integer | 100 | Resultados por página (máx: 1.000) |
offset | integer | 0 | Posição inicial |
status | string | - | Filtrar por status: valid, invalid, unknown |
Resposta
{
"job_id": "job_abc123xyz",
"total": 1000,
"limit": 100,
"offset": 0,
"results": [
{
"email": "user1@example.com",
"status": "valid",
"result": {
"deliverable": true,
"disposable": false,
"role": false
},
"score": 0.95
},
{
"email": "user2@example.com",
"status": "invalid",
"result": {
"deliverable": false,
"reason": "mailbox_not_found"
},
"score": 0.10
}
]
}Verificar Créditos
Obtém o saldo atual de créditos e informações de uso.
GET /creditsResposta
{
"available": 9500,
"used": 500,
"total": 10000,
"plan": "Professional",
"resets_at": "2025-02-01T00:00:00Z",
"rate_limit": {
"requests_per_hour": 10000,
"remaining": 9850
}
}Webhooks
Criar Webhook
POST /webhooks{
"url": "https://your-app.com/webhooks/emailverify",
"events": ["verification.completed", "bulk.completed"],
"secret": "your-webhook-secret"
}Listar Webhooks
GET /webhooksExcluir Webhook
DELETE /webhooks/{webhook_id}Eventos de Webhook
| Evento | Descrição |
|---|---|
verification.completed | Verificação de email único concluída |
bulk.completed | Trabalho em massa finalizado |
bulk.failed | Trabalho em massa falhou |
credits.low | Créditos abaixo do limite |
Payload do Webhook
{
"event": "bulk.completed",
"timestamp": "2025-01-15T10:35:00Z",
"data": {
"job_id": "job_abc123xyz",
"status": "completed",
"total": 1000,
"valid": 850,
"invalid": 100,
"unknown": 50
},
"signature": "sha256=..."
}Status de Verificação
| Status | Significado | Ação Recomendada |
|---|---|---|
valid | Email existe e pode receber mensagens | Seguro para enviar |
invalid | Email não existe ou não pode receber | Remover da lista |
unknown | Não foi possível determinar a validade | Tentar novamente mais tarde ou usar com cautela |
accept_all | Domínio aceita todos os emails (catch-all) | Monitorar por devoluções |
Respostas de Erro
Todos os erros seguem um formato consistente:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": "Additional context (optional)"
}
}Códigos de Status HTTP
| Código | Descrição |
|---|---|
200 | Sucesso |
400 | Requisição Inválida - Parâmetros inválidos |
401 | Não Autorizado - Chave de API inválida ou ausente |
403 | Proibido - Permissões insuficientes |
404 | Não Encontrado - Recurso não existe |
429 | Muitas Requisições - Limite de taxa excedido |
500 | Erro Interno do Servidor |
503 | Serviço Indisponível |
Códigos de Erro
| Código | Status HTTP | Descrição |
|---|---|---|
INVALID_API_KEY | 401 | Chave de API inválida ou ausente |
RATE_LIMIT_EXCEEDED | 429 | Muitas requisições |
INSUFFICIENT_CREDITS | 403 | Créditos insuficientes |
INVALID_EMAIL | 400 | Formato de email inválido |
INVALID_REQUEST | 400 | Corpo da requisição malformado |
JOB_NOT_FOUND | 404 | ID do trabalho em massa não encontrado |
TIMEOUT | 504 | Tempo limite da verificação esgotado |
Melhores Práticas
1. Use Variáveis de Ambiente
Nunca codifique chaves de API diretamente:
// Bom
const apiKey = process.env.EMAILVERIFY_API_KEY;
// Ruim - não faça isso
const apiKey = 'bv_live_xxx';2. Trate Limites de Taxa
Implemente backoff exponencial:
async function verifyWithRetry(email, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await verify(email);
} catch (error) {
if (error.code === 'RATE_LIMIT_EXCEEDED') {
await sleep(Math.pow(2, i) * 1000);
continue;
}
throw error;
}
}
}3. Use em Massa para Múltiplos Emails
Para verificar mais de 10 emails, use o endpoint em massa:
// Bom - uma única chamada de API
const job = await client.verifyBulk(emails);
// Ruim - muitas chamadas individuais
for (const email of emails) {
await client.verify(email);
}4. Implemente Webhooks para Trabalhos em Massa
Não faça polling constantemente; use webhooks:
// Envie com webhook
const job = await client.verifyBulk(emails, {
webhookUrl: 'https://your-app.com/webhook',
});SDKs
Use nossos SDKs oficiais para facilitar a integração: