API Reference
Complete email checker API reference. Endpoints, parameters, response codes for email verification and validation.
La API de EmailVerify es un servicio RESTful que proporciona potentes capacidades de verificación de correos electrónicos. Todas las solicitudes a la API deben realizarse a través de HTTPS.
URL Base
https://api.emailverify.ai/v1Autenticación
Todas las solicitudes a la API requieren autenticación usando un token Bearer en el encabezado Authorization:
Authorization: Bearer YOUR_API_KEYObtén tu clave API desde el panel de EmailVerify.
Ejemplo
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"}'Límites de Tasa
| Plan | Solicitudes/Hora | Solicitudes/Día |
|---|---|---|
| Free | 100 | 1,000 |
| Starter | 1,000 | 10,000 |
| Professional | 10,000 | 100,000 |
| Enterprise | Personalizado | Personalizado |
La información sobre los límites de tasa se incluye en los encabezados de respuesta:
| Encabezado | Descripción |
|---|---|
X-RateLimit-Limit | Máximo de solicitudes permitidas |
X-RateLimit-Remaining | Solicitudes restantes en la ventana |
X-RateLimit-Reset | Marca de tiempo Unix cuando se restablece el límite |
Cuando se excede el límite de tasa, recibirás una respuesta 429 Too Many Requests:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later.",
"retry_after": 3600
}
}Puntos Finales
Verificación de Correo Electrónico Individual
Verifica una sola dirección de correo electrónico con resultados detallados.
POST /verifySolicitud
{
"email": "user@example.com",
"smtp_check": true,
"timeout": 5000
}Parámetros
| Parámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
email | string | Sí | - | Dirección de correo electrónico a verificar |
smtp_check | boolean | No | true | Realizar verificación de buzón SMTP |
timeout | integer | No | 5000 | Tiempo de espera de solicitud en milisegundos (máx: 30000) |
Respuesta
{
"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 de Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
email | string | La dirección de correo electrónico verificada |
status | string | Estado de verificación: valid, invalid, unknown, accept_all |
result | object | Resultados detallados de la verificación |
score | number | Puntuación de confianza (0.0 - 1.0) |
reason | string | Razón del estado invalid/unknown (nullable) |
credits_used | integer | Número de créditos consumidos |
Campos del Objeto Result
| Campo | Tipo | Descripción |
|---|---|---|
deliverable | boolean | Si el correo puede recibir mensajes |
valid_format | boolean | Si el correo tiene sintaxis válida |
valid_domain | boolean | Si el dominio existe |
valid_mx | boolean | Si el dominio tiene registros MX |
disposable | boolean | Si el correo es de un servicio desechable |
role | boolean | Si el correo está basado en roles (info@, support@) |
catchall | boolean | Si el dominio acepta todos los correos |
free | boolean | Si el correo es de un proveedor gratuito |
smtp_valid | boolean | Si la verificación SMTP pasó |
Verificación Masiva de Correos Electrónicos
Envía múltiples direcciones de correo electrónico para verificación. Devuelve un ID de trabajo para seguir el progreso.
POST /verify/bulkSolicitud
{
"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 | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
emails | array | Sí | - | Array de direcciones de correo electrónico (máx: 10,000) |
smtp_check | boolean | No | true | Realizar verificación SMTP |
webhook_url | string | No | - | URL para recibir notificación de finalización |
Respuesta
{
"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"
}Obtener Estado del Trabajo Masivo
Verifica el estado de un trabajo de verificación masiva.
GET /verify/bulk/{job_id}Respuesta (En Progreso)
{
"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"
}Respuesta (Completado)
{
"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 Estado del Trabajo
| Estado | Descripción |
|---|---|
pending | El trabajo está en cola |
processing | El trabajo se está procesando |
completed | El trabajo finalizó exitosamente |
failed | El trabajo falló (ver campo error) |
Obtener Resultados del Trabajo Masivo
Recupera los resultados de verificación de un trabajo masivo completado.
GET /verify/bulk/{job_id}/resultsParámetros de Consulta
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
limit | integer | 100 | Resultados por página (máx: 1000) |
offset | integer | 0 | Posición de inicio |
status | string | - | Filtrar por estado: valid, invalid, unknown |
Respuesta
{
"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én el saldo actual de créditos e información de uso.
GET /creditsRespuesta
{
"available": 9500,
"used": 500,
"total": 10000,
"plan": "Professional",
"resets_at": "2025-02-01T00:00:00Z",
"rate_limit": {
"requests_per_hour": 10000,
"remaining": 9850
}
}Webhooks
Crear Webhook
POST /webhooks{
"url": "https://your-app.com/webhooks/emailverify",
"events": ["verification.completed", "bulk.completed"],
"secret": "your-webhook-secret"
}Listar Webhooks
GET /webhooksEliminar Webhook
DELETE /webhooks/{webhook_id}Eventos de Webhook
| Evento | Descripción |
|---|---|
verification.completed | Verificación de correo individual completada |
bulk.completed | Trabajo masivo finalizado |
bulk.failed | Trabajo masivo falló |
credits.low | Créditos por debajo del umbral |
Carga del 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=..."
}Estado de Verificación
| Estado | Significado | Acción Recomendada |
|---|---|---|
valid | El correo existe y puede recibir mensajes | Seguro para enviar |
invalid | El correo no existe o no puede recibir | Eliminar de la lista |
unknown | No se pudo determinar la validez | Reintentar más tarde o usar con precaución |
accept_all | El dominio acepta todos los correos (catch-all) | Monitorear rebotes |
Respuestas de Error
Todos los errores siguen un formato consistente:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": "Additional context (optional)"
}
}Códigos de Estado HTTP
| Código | Descripción |
|---|---|
200 | Éxito |
400 | Solicitud Incorrecta - Parámetros inválidos |
401 | No Autorizado - Clave API inválida o faltante |
403 | Prohibido - Permisos insuficientes |
404 | No Encontrado - El recurso no existe |
429 | Demasiadas Solicitudes - Límite de tasa excedido |
500 | Error Interno del Servidor |
503 | Servicio No Disponible |
Códigos de Error
| Código | Estado HTTP | Descripción |
|---|---|---|
INVALID_API_KEY | 401 | La clave API es inválida o falta |
RATE_LIMIT_EXCEEDED | 429 | Demasiadas solicitudes |
INSUFFICIENT_CREDITS | 403 | No hay suficientes créditos |
INVALID_EMAIL | 400 | El formato del correo es inválido |
INVALID_REQUEST | 400 | El cuerpo de la solicitud está mal formado |
JOB_NOT_FOUND | 404 | ID de trabajo masivo no encontrado |
TIMEOUT | 504 | La verificación agotó el tiempo de espera |
Mejores Prácticas
1. Usa Variables de Entorno
Nunca codifiques las claves API directamente:
// Bueno
const apiKey = process.env.EMAILVERIFY_API_KEY;
// Malo - no hagas esto
const apiKey = 'bv_live_xxx';2. Maneja los Límites de Tasa
Implementa retroceso 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. Usa Bulk para Múltiples Correos
Para verificar más de 10 correos, usa el punto final masivo:
// Bueno - una sola llamada API
const job = await client.verifyBulk(emails);
// Malo - muchas llamadas individuales
for (const email of emails) {
await client.verify(email);
}4. Implementa Webhooks para Trabajos Masivos
No hagas sondeos constantes; usa webhooks:
// Enviar con webhook
const job = await client.verifyBulk(emails, {
webhookUrl: 'https://your-app.com/webhook',
});SDKs
Usa nuestros SDKs oficiales para una integración más fácil: