Referencia de la API REST de Email Verifier
Referencia completa de la API REST de Email Verifier con autenticación, scopes, 8 endpoints, créditos, trabajos masivos, paginación, exportación CSV y errores.
Detalles del artículo
Tipo, dificultad, planes e información de última actualización.
▼
Detalles del artículo
Tipo, dificultad, planes e información de última actualización.
- Tipo
- Referencia
- Dificultad
- Intermedio
- Planes
- Nano · Starter · Pro · Agency
- Última actualización
- 10 de sep. de 2026
La API de Email Verifier se ofrece bajo /api/v1. Usa el host de TrekMail donde tu cuenta inicia sesión. Los ejemplos usan https://YOUR-TREKMAIL-HOST como marcador de posición.
Autenticación y scopes
Envía un token de API en el encabezado Authorization:
Authorization: Bearer YOUR_API_TOKEN
Activa los scopes al crear el token:
| Scope | Necesario para |
|---|---|
verify:read |
Créditos, listas de trabajos, estado de trabajos y descargas. |
verify:write |
Verificaciones individuales, envío masivo, cancelación y eliminación. |
Asigna ambos scopes a un cliente que deba enviar trabajo y después leer o descargar el resultado.
Host y formato de solicitud
Todos los ejemplos usan cuerpos JSON y un token Bearer. El cargador de archivos del panel es independiente de la API: POST /verify/bulk acepta un array JSON emails, no un archivo multipart. Usa el host exacto que corresponda a la cuenta y al token. No presupongas que un token o saldo de un host con una marca funciona en otro.
Envía Content-Type: application/json en las solicitudes POST /verify y POST /verify/bulk. Guarda el token y el valor de idempotencia fuera del código del cliente.
Idempotencia
POST /api/v1/verify/bulk y DELETE /api/v1/verify/bulk/{jobId} requieren el encabezado Idempotency-Key. Genera un valor nuevo para cada operación prevista y reutilízalo solo al reintentar esa misma operación.
Idempotency-Key: 58dfa0de-96eb-4521-a0f9-2e5eac6721ee
La verificación individual y la cancelación de trabajos no requieren ese encabezado. Las solicitudes masivas también están protegidas mediante detección de listas duplicadas para la misma lista normalizada y el mismo modo durante 24 horas, pero una clave de idempotencia sigue siendo el mecanismo correcto para reintentar.
Cómo actuar ante un resultado de red incierto
Si tu aplicación pierde la respuesta de una solicitud masiva, no generes otra clave de idempotencia ni envíes otra lista. Repite la solicitud idéntica con la misma clave. Guarda la clave junto al identificador de la lista de origen hasta que TrekMail devuelva un ID de trabajo. Así, el reintento permanece vinculado a la operación original y no genera un segundo cargo evitable.
Resumen de endpoints
| Método y ruta | Scope | Finalidad |
|---|---|---|
GET /verify/credits |
verify:read |
Consultar créditos disponibles. |
POST /verify |
verify:write |
Verificar una dirección de inmediato. |
POST /verify/bulk |
verify:write |
Crear un trabajo masivo asíncrono. |
GET /verify/bulk/{jobId} |
verify:read |
Consultar el progreso y los resultados disponibles. |
GET /verify/bulk/{jobId}/download |
verify:read |
Descargar una exportación CSV. |
GET /verify/bulk |
verify:read |
Enumerar trabajos. |
POST /verify/bulk/{jobId}/cancel |
verify:write |
Cancelar un trabajo pendiente o en curso. |
DELETE /verify/bulk/{jobId} |
verify:write |
Eliminar definitivamente un trabajo que no está en curso. |
Antepón /api/v1 a cada ruta de la tabla.
Consultar el saldo de créditos
GET /api/v1/verify/credits
En el host estándar de TrekMail, la respuesta incluye la asignación del plan y el saldo comprado:
{
"monthly_limit": 300,
"monthly_used": 120,
"monthly_remaining": 180,
"purchased_balance": 5000,
"total_available": 5180,
"plan": "pro",
"trialing": false,
"resets_at": "2026-10-01T00:00:00+00:00"
}
En un host White Label, el producto con marca solo dispone de créditos comprados, por lo que la respuesta contiene purchased_balance y total_available.
Solicitud de ejemplo:
curl https://YOUR-TREKMAIL-HOST/api/v1/verify/credits \
-H "Authorization: Bearer YOUR_API_TOKEN"
Consulta el saldo justo antes de un envío grande. La respuesta de saldo es una instantánea. Si una aplicación envía varios trabajos, debe registrar el importe cobrado en cada respuesta masiva en vez de calcularlo después a partir de una cifra obsoleta.
Campos del saldo
| Campo | Significado |
|---|---|
monthly_limit |
Asignación del plan para el periodo de restablecimiento actual. |
monthly_used |
Créditos ya gastados de esa asignación. |
monthly_remaining |
Asignación aún disponible antes de necesitar créditos comprados. |
purchased_balance |
Créditos comprados por separado y todavía no gastados. |
total_available |
Cantidad utilizable para el próximo trabajo en este host. |
resets_at |
Próxima hora de restablecimiento conocida, cuando esté disponible. |
Las respuestas de saldo de White Label contienen menos campos deliberadamente, porque el producto con marca solo utiliza créditos comprados.
Verificar una dirección
POST /api/v1/verify
{
"email": "person@example.com",
"mode": "quick"
}
| Campo | Obligatorio | Notas |
|---|---|---|
email |
Sí | Una dirección de email, de hasta 320 caracteres. |
mode |
No | quick es el valor predeterminado; se admite deep cuando Deep está disponible. |
La respuesta incluye email, status, trust_score, checks, provider, risk_factors y credits_remaining. En el host estándar, credits_remaining contiene los valores monthly y purchased. La estructura detallada de checks puede variar según el modo y la información que ofrezca el proveedor receptor.
Quick cuesta 1 crédito. Deep suele costar 2 créditos, aunque las excepciones específicas del proveedor se calculan a 1 crédito. Si la verificación no puede ejecutarse después del cobro, la solicitud de una dirección reembolsa el cargo y devuelve una respuesta de indisponibilidad temporal.
Solicitud de ejemplo:
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email":"person@example.com","mode":"quick"}'
Usa status, trust_score, provider y risk_factors del nivel superior como contrato normal de la aplicación. checks contiene pruebas auxiliares útiles, pero cada clave puede variar si se omite una comprobación previa, no está disponible o el modo Deep obtiene información adicional.
Interpretación de un resultado individual
| Campo | Uso |
|---|---|
email |
Asociar el resultado con la entrada normalizada que guardó tu aplicación. |
status |
Incorporar la dirección al flujo de revisión o campaña. |
trust_score |
Ordenar o priorizar el trabajo dentro de un estado, no sustituir el consentimiento. |
provider |
Explicar qué dominio evaluó el verificador. |
risk_factors |
Mostrar al operador un motivo conciso para la revisión. |
checks |
Mostrar información de apoyo cuando el operador necesite entender un resultado. |
No hagas que una aplicación trate una respuesta remota aceptada como verificación de propiedad o permiso. Mantén separadas las decisiones de suscripción, baja y preferencias de contacto.
Crear un trabajo masivo
POST /api/v1/verify/bulk
{
"emails": ["first@example.com", "second@example.net"],
"name": "September contacts",
"mode": "deep"
}
| Campo | Obligatorio | Notas |
|---|---|---|
emails |
Sí | Array de hasta 50,000 entradas enviadas. Se excluyen y notifican las entradas con sintaxis no válida. |
name |
No | Etiqueta de hasta 255 caracteres. |
mode |
No | quick de forma predeterminada o deep cuando esté disponible. |
Los duplicados se normalizan antes de calcular el precio. Un trabajo nuevo creado correctamente devuelve 201 con:
{
"job_id": 42,
"total": 2,
"status": "pending",
"rejected_count": 0,
"rejected_sample": [],
"credits_charged": 4,
"breakdown": {"probe": 2, "skip": 0, "deep_savings": 0}
}
probe y skip explican el cálculo del precio de Deep. deep_savings es la diferencia respecto a cobrar la tarifa completa de Deep por cada dirección enviada. Una lista duplicada devuelve el job_id y estado existentes en vez de iniciar otro trabajo.
Solicitud de ejemplo:
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 58dfa0de-96eb-4521-a0f9-2e5eac6721ee" \
-d '{"name":"September contacts","mode":"deep","emails":["first@example.com","second@example.net"]}'
La API comprueba que los valores enviados tengan una sintaxis de email válida antes de admitir el trabajo. Si se rechazan todas las entradas, devuelve 422 y no crea un trabajo. Si solo se rechazan algunas, la respuesta correcta indica rejected_count y hasta cinco valores en rejected_sample. No uses esa muestra pequeña como informe completo de limpieza. Conserva el resultado de validación del origen en tu propio importador.
Lista de control para el envío masivo
- Lee y normaliza el origen en tu propia aplicación.
- Limita la solicitud a 50,000 entradas enviadas.
- Genera y conserva una clave de idempotencia antes de la solicitud.
- Usa un nombre de trabajo suficientemente descriptivo para que un operador lo reconozca después.
- Guarda
job_id,credits_chargedy el desglose de precio que devuelve TrekMail. - Consulta periódicamente el
job_idguardado. No deduzcas la finalización de la solicitud HTTP original.
Consultar un trabajo
GET /api/v1/verify/bulk/{jobId}
La respuesta base incluye job_id, name, status, total, processed, progress, summary, created_at y completed_at.
Cuando hay resultados para un trabajo completado, parcial o fallido, la respuesta también incluye:
{
"results": [
{
"email": "person@example.com",
"status": "valid",
"trust_score": 82,
"checks": {},
"provider": "example.com",
"risk_factors": ["no_dmarc"]
}
],
"pagination": {"page": 1, "per_page": 100, "total": 1, "last_page": 1}
}
Parámetros de consulta opcionales:
| Parámetro | Notas |
|---|---|
page |
Número de página de resultados. |
per_page |
De 1 a 500; valor predeterminado 100. |
status |
pending, queued, safe, valid, risky, invalid o unknown. |
search |
Búsqueda parcial literal de email, hasta 320 caracteres. |
Un trabajo cancelado que tenga filas procesadas se puede descargar, pero usa el endpoint de descarga para exportarlo.
Leer estados sin hacer suposiciones
| Estado | Significado para un cliente de API |
|---|---|
pending |
El trabajo se aceptó y espera ser procesado. |
processing |
El trabajo está en curso. Usa processed y progress para informar al usuario. |
completed |
Terminó el trabajo completo. Consulta los resultados o descarga el CSV. |
partial |
Se completó un subconjunto. Revísalo como tal, no como resultado de toda la lista. |
cancelled |
Se detuvo el trabajo. Las filas procesadas todavía pueden descargarse. |
failed |
El trabajo no pudo terminar. Consulta el estado y el contexto del error antes de reintentar. |
Un cliente de API debe hacer consultas periódicas con espera incremental. No envíes un nuevo trabajo masivo solo porque el actual siga pendiente o porque una solicitud de red haya agotado el tiempo localmente.
Ejemplo de respuesta de estado
{
"job_id": 42,
"name": "September contacts",
"status": "processing",
"total": 1500,
"processed": 400,
"progress": 27,
"summary": {"safe": 220, "valid": 105, "risky": 55, "invalid": 20},
"created_at": "2026-09-04T13:15:00+00:00",
"completed_at": null
}
summary puede crecer mientras avanza el trabajo. Usa processed y total para mostrar el progreso, en vez de sumar solo las categorías que la aplicación reconoce actualmente.
Descargar un trabajo
GET /api/v1/verify/bulk/{jobId}/download
La descarga está disponible para trabajos completados, parciales o cancelados que tengan filas procesadas. Transmite un CSV con las columnas Email, Status, Trust Score, Provider y Risk Factors.
| Parámetro de consulta | Valores permitidos |
|---|---|
filter |
all (predeterminado), safe, safe_risky (Safe + Valid + Risky). |
Ejemplo:
curl -o september-results.csv \
"https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42/download?filter=safe_risky" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Guarda la descarga dentro del periodo de conservación de resultados de 15 días. El CSV es una exportación para tu propio flujo. No cambia el consentimiento, las suscripciones ni los contactos de otro sistema.
El endpoint de descarga devuelve un conflicto si todavía no hay una exportación procesada. Comprueba primero el estado del trabajo. Una solicitud correcta transmite el CSV en vez de devolver un envoltorio JSON, así que trátala como respuesta de archivo en tu cliente HTTP.
Enumerar trabajos
GET /api/v1/verify/bulk
Usa page, per_page y el parámetro opcional status. per_page tiene un valor predeterminado de 20 y admite de 1 a 100. Los estados de trabajo son pending, processing, completed, partial, cancelled y failed.
La respuesta contiene un array jobs y un objeto pagination. Cada registro de trabajo incluye ID, nombre, estado, total, cantidad procesada, progreso y marcas de tiempo.
Ejemplo:
curl "https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk?status=processing&per_page=20" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Usa el endpoint de listado cuando el worker se reinicie o necesites conciliar los ID de trabajos. No trates el nombre de un trabajo como identificador único. Guarda el job_id numérico devuelto.
Estructura de la respuesta de lista
{
"jobs": [
{
"job_id": 42,
"name": "September contacts",
"status": "completed",
"total": 1500,
"processed": 1500,
"progress": 100,
"created_at": "2026-09-04T13:15:00+00:00",
"completed_at": "2026-09-04T13:28:00+00:00"
}
],
"pagination": {"page": 1, "per_page": 20, "total": 1, "last_page": 1}
}
Usa el parámetro de consulta status cuando una página de operaciones solo necesite trabajos activos o finalizados. La paginación es importante para las cuentas que verifican muchas listas. No presupongas que una respuesta contiene todo el historial.
Cancelar un trabajo
POST /api/v1/verify/bulk/{jobId}/cancel
Cancela únicamente trabajos pendientes o en curso. Una respuesta correcta es:
{"status":"cancelled","credits_refunded":40}
El reembolso corresponde al trabajo no procesado. Si el trabajo llega a un estado terminal antes de que la cancelación lo alcance, la API devuelve un conflicto y no cambia el resultado.
curl -X POST https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42/cancel \
-H "Authorization: Bearer YOUR_API_TOKEN"
Cancelar no elimina el trabajo. Descarga las filas procesadas si las necesitas o elimina después el registro finalizado.
Eliminar un trabajo
DELETE /api/v1/verify/bulk/{jobId}
Cancela primero un trabajo en curso. La eliminación borra definitivamente el trabajo y sus resultados después de que TrekMail retire de forma segura la lista de origen preparada. Una respuesta correcta es:
{"deleted":true}
curl -X DELETE https://YOUR-TREKMAIL-HOST/api/v1/verify/bulk/42 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Idempotency-Key: 843ef0c5-4dc0-4c09-bacd-5bd0fe87e847"
Esta operación es permanente para el registro del verificador. No retira los archivos CSV que la aplicación ya haya descargado, por lo que debes aplicar tu propio proceso de conservación a esas copias.
Orden de eliminación
- Consulta el estado del trabajo.
- Cancélalo si está pendiente o en proceso.
- Guarda cualquier exportación procesada que debas conservar.
- Elimina con una clave de idempotencia el trabajo que ya no está en curso.
- Elimina las copias que mantenga tu sistema según sus reglas de privacidad y conservación.
Errores y reintentos
| Estado | Motivo habitual | Qué hacer |
|---|---|---|
| 402 | No hay suficientes créditos. | Añade créditos o reduce el trabajo. |
| 404 | El trabajo no pertenece a esta cuenta o no existe. | Comprueba el ID y la cuenta del token. |
| 409 | El estado actual impide descargar, cancelar o eliminar el trabajo. | Consulta su estado y sigue el siguiente paso indicado. |
| 422 | Entrada no válida, modo Deep no disponible o falta la clave de idempotencia cuando es obligatoria. | Corrige la solicitud. |
| 429 | Se alcanzó el límite de frecuencia de solicitudes. | Reintenta más tarde con espera incremental. |
| 503 | Fallo temporal de verificación. | Reintenta más tarde. |
La verificación individual tiene un límite de ruta de 60 solicitudes por minuto y el envío masivo, de 10 solicitudes por minuto. Implementa reintentos con espera incremental, conserva la misma clave de idempotencia para un reintento masivo y no reintentes a ciegas tras un resultado de red desconocido.
Patrón seguro de reintento
- Genera y conserva una clave de idempotencia antes de un envío masivo.
- Envía la solicitud con esa clave.
- Si se pierde la respuesta, repite la solicitud idéntica con la misma clave.
- Conserva el
job_iddevuelto y deja de crear nuevos envíos para esa lista de origen. - Consulta ese trabajo hasta que alcance un estado terminal y después descarga o procesa el resultado.
En una verificación individual, un 503 temporal significa que el servicio no pudo completar la comprobación. Reintenta después con la espera incremental habitual. No conviertas esa respuesta en un resultado Invalid en tu propia base de datos.
Proteger los datos de contacto
Las listas de correo son datos personales en muchos contextos. Envía solo los datos necesarios para la verificación, limita el acceso del token al sistema que ejecuta el trabajo y evita registrar arrays completos de direcciones en los logs de la aplicación. Cuando necesites logs, guarda el ID del trabajo, la cantidad, los tiempos y el resultado general, no la lista completa.
TrekMail conserva los resultados durante 15 días. Planifica el almacenamiento seguro de exportaciones o la ruta de eliminación antes de integrar listas de gran volumen.
Las señales de verificación no demuestran la propiedad de una persona, su consentimiento ni la entrega futura. Mantén la gestión de permisos y supresión en tu aplicación aunque una dirección obtenga Safe.
Artículos relacionados
Ve a guías cercanas que continúan el flujo de trabajo.