Códigos de Error
Referencia completa de los códigos de error de la API de Mail.Land y sus significados
Cada respuesta de error de la API de MailLand incluye un campo code con un código de error legible por máquina y un campo message con una descripción legible por humanos.
Formato de Respuesta de Error
{
"code": "DOMAIN_NOT_VERIFIED",
"message": "Domain is not verified",
"timestamp": "2026-02-18T12:35:00Z",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
}Algunos errores incluyen details adicionales:
{
"code": "IP_RATE_LIMIT_EXCEEDED",
"message": "Too many requests from this IP. Retry after 45 seconds.",
"details": {
"limit": 300,
"current": 301,
"retryAfter": 45,
"resetAt": "2026-02-18T12:35:00Z"
}
}Validación de Solicitud (400)
Se devuelve cuando el cuerpo de la solicitud, los parámetros de consulta o los encabezados están malformados o faltan campos obligatorios.
| Código | Descripción |
|---|---|
INVALID_REQUEST | Solicitud inválida general |
VALIDATION_FAILED | Uno o más campos fallaron la validación |
INVALID_EMAIL_FORMAT | El formato de la dirección de correo electrónico es inválido |
WEBHOOK_DESTINATION_NOT_ALLOWED | Una URL de webhook es rechazada por la política de destino: los webhooks se entregan solo por HTTPS en el puerto 443 y no pueden apuntar a los servidores, direcciones o nombres de host de MailLand |
MISSING_CONTENT | Obsoleto desde 2026-04. Use VALIDATION_FAILED: los endpoints send/scheduled ahora devuelven errores de validación estructurados. |
CONTENT_TOO_LARGE | "The message is too large to send: it would exceed the platform's message-size limit. Reduce the HTML, text, attachments or recipients.": El mensaje supera el límite de tamaño de la plataforma. POST /v1/transactional/send y send-batch lo devuelven como 413; no se pone nada en cola. Reduzca el mensaje. En la importación CSV es 400 |
transactional_recipient_limit_exceeded | Más de 5 destinatarios en una credencial transaccional (código en minúsculas) |
marketing_recipient_limit_exceeded | Más de 1.000 destinatarios en una credencial de marketing (código en minúsculas) |
VALIDATION_FAILED | Envío por lotes con más de 10.000 destinatarios |
SEND_FAILED | La operación de envío de correo electrónico falló, incluido "todos los destinatarios están suprimidos" |
BATCH_SEND_FAILED | La operación de envío por lotes falló |
IDEMPOTENCY_KEY_INVALID | La clave de idempotencia está vacía, mal formada, supera 255 caracteres, o la cabecera se envió más de una vez (solo send/send-batch) |
IDEMPOTENCY_KEY_CONFLICT | La cabecera X-Idempotency-Key y el campo idempotencyKey se enviaron a la vez y difieren |
INVALID_CURSOR | El parámetro de paginación por cursor está mal formado |
PASSWORD_REQUIRED | Se requiere confirmación de contraseña |
RECIPIENT_SUPPRESSED | El destinatario está en la lista de supresión |
Autenticación (401)
Se devuelve cuando la solicitud no tiene credenciales o las credenciales son inválidas.
| Código | Descripción |
|---|---|
UNAUTHORIZED | X-API-Key ausente, inválida, vencida o revocada: el middleware de la clave API devuelve este único código en todos los casos, con un message descriptivo. No distingue ausente/inválida/vencida/revocada por código. Una contraseña de inicio de sesión incorrecta también devuelve 401 UNAUTHORIZED. |
LOGIN_REQUIRED | Se requiere inicio de sesión para esta operación |
Autenticación de Dos Factores
Los fallos de 2FA devuelven 400 INVALID_REQUEST con un message descriptivo (por ejemplo, "Invalid code", "2FA is already enabled"). No existen códigos de error 2FA dedicados, lea el campo message.
Autorización (403)
Se devuelve cuando el usuario autenticado no tiene permiso para realizar la acción solicitada.
| Código | Descripción |
|---|---|
FORBIDDEN | Acceso denegado general |
INSUFFICIENT_PERMISSIONS | El usuario carece del rol o permiso requerido |
ACCOUNT_SUSPENDED | La cuenta de usuario ha sido suspendida |
ACCOUNT_DISABLED | La cuenta de usuario ha sido deshabilitada |
ACCOUNT_NOT_ACTIVE | La cuenta de usuario no está activa |
IP_NOT_ALLOWED | La IP del cliente no está en la lista de permitidos de la credencial |
VALIDATION_CREDENTIAL_REQUIRED | Los endpoints de validación de correo requieren una clave de API de Validación. Se rechaza una clave de Envío o de Entrada; se acepta una sesión iniciada o una clave del producto Validación |
PLAN_LIMIT_REACHED | Se alcanzó el límite de recursos del plan, se requiere actualización |
SENDING_BLOCKED | El nivel de verificación de la cuenta no permite este envío. Nota: el propio rechazo SendingBlocked del motor de políticas es 403; el mismo código proveniente de la ruta de política de tasa/calentamiento es 429, vea la sección Motor de Políticas abajo. |
SUBSCRIPTION_EXPIRED | La suscripción ha expirado |
NO_ACTIVE_SUBSCRIPTION | No se encontró suscripción activa |
TENANT_APPROVAL_REQUIRED | La cuenta está pendiente de revisión antes de poder enviar. Reintentar no ayuda; contacte con soporte |
MARKETING_NOT_YET_ALLOWED | El envío de marketing aún no está abierto. Se abre automáticamente con un historial transaccional limpio (al menos 500 correos transaccionales entregados en al menos 7 días, rebotes duros por debajo del 2 % y quejas por debajo del 0,1 %) |
MARKETING_SUSPENDED | El correo de marketing no está disponible temporalmente en toda la plataforma. El correo transaccional no se ve afectado; las campañas y automatizaciones se conservan y se reanudan cuando se habilite el marketing |
ACTION_REQUIRED | Se requiere acción del usuario antes de que el envío pueda reanudarse. También se devuelve en cada envío mientras el espacio de trabajo tenga una retención de entregabilidad activa (incumplimiento de tasa de rebotes/quejas): el relay SMTP devuelve 550 para la misma retención. Vea Retenciones de entregabilidad |
No Encontrado (404)
Se devuelve cuando el recurso solicitado no existe o pertenece a un espacio de trabajo diferente.
| Código | Descripción |
|---|---|
RESOURCE_NOT_FOUND | Recurso genérico no encontrado |
USER_NOT_FOUND | El usuario no existe |
WEBHOOK_NOT_FOUND | El webhook no existe |
DELIVERY_NOT_FOUND | La entrega del webhook no existe |
La mayoría de las respuestas 404 usan el código RESOURCE_NOT_FOUND. El campo message proporciona contexto sobre qué recurso no se encontró (por ejemplo, "Domain not found", "Template not found", "Campaign not found"). Los endpoints de webhooks son la excepción: reintentar una entrega de webhook usa WEBHOOK_NOT_FOUND / DELIVERY_NOT_FOUND.
Conflicto (409)
Se devuelve cuando la operación entra en conflicto con el estado actual del recurso.
| Código | Descripción |
|---|---|
CONFLICT | Conflicto de recurso general |
IDEMPOTENCY_KEY_REUSED | La clave de idempotencia ya está en uso para otro endpoint de esta cuenta (solo send/send-batch) |
Dominio y Envío (422)
Se devuelve cuando la solicitud está bien formada pero no puede procesarse debido a restricciones de lógica de negocio.
| Código | Descripción |
|---|---|
DOMAIN_NOT_FOUND | El dominio no existe en el espacio de trabajo |
DOMAIN_NOT_VERIFIED | El dominio no ha sido verificado, complete la configuración DNS primero |
DOMAIN_NOT_ALLOWED_FOR_CREDENTIAL | La credencial no está autorizada para este dominio de remitente |
CAMPAIGN_LINK_BLOCKED | Un enlace de una campaña apunta a un destino marcado como inseguro; la campaña no se programa ni se envía |
DOMAIN_SUSPENDED | El dominio ha sido suspendido |
DOMAIN_VERIFICATION_EXPIRED | La verificación del dominio ha expirado, verifique nuevamente |
Pago Requerido (402)
Se devuelve cuando el saldo de crédito del espacio de trabajo no puede cubrir la operación solicitada.
| Código | Descripción |
|---|---|
INSUFFICIENT_CREDITS | No hay suficientes créditos para completar la operación |
Limitación de Velocidad (429)
Se devuelve cuando la solicitud excede los límites de velocidad. Normalmente incluye el encabezado Retry-After; si falta, use retroceso exponencial en lugar de asumir que no hay espera.
Límites de Velocidad de la API
| Código | Descripción |
|---|---|
RATE_LIMIT_EXCEEDED | Límite de velocidad general de la API excedido |
IP_RATE_LIMIT_EXCEEDED | Límite de velocidad basado en IP excedido |
SUPPORT_RATE_LIMITED | Límite de velocidad de la API de soporte excedido |
TOO_MANY_LOGIN_ATTEMPTS | Demasiados intentos de inicio de sesión fallidos, bloqueo temporal |
Límites de Velocidad de Envío de Correo Electrónico
| Código | Descripción |
|---|---|
DAILY_LIMIT_EXCEEDED | Límite diario de envío de correo electrónico excedido |
WARMUP_LIMIT_EXCEEDED | Se alcanzó el límite diario de arranque de envíos de la cuenta; se restablece a las 00:00 UTC (véase Calentamiento de IP) |
PAYMENT_DAILY_LIMIT_EXCEEDED | Límite diario alcanzado en una cuenta con pago vencido |
Capacidad de la plataforma (429)
Estos rechazos significan que en este momento es la plataforma, y no la cuota de su cuenta, la que limita los envíos nuevos. Cada uno es un 429 con cabecera Retry-After, no se puso nada en cola y es seguro reintentar la misma solicitud. Por SMTP son un 421 Try again later: <message> transitorio. El message es el texto en inglés que devuelve la API.
| Código | message (tal como se devuelve) | Cuándo reintentar |
|---|---|---|
WARMUP_POOL_BUDGET_EXCEEDED | "Sending is temporarily paused for today. It resumes automatically at 00:00 UTC; no action is needed." | Tras Retry-After (próximas 00:00 UTC) |
WARMUP_POOL_BUDGET_EXCEEDED | "Sending is briefly delayed. Please retry in a few minutes." (mismo código, cuando la capacidad de la plataforma no puede verificarse un momento) | Tras el Retry-After corto |
WARMUP_POOL_EMPTY | "Sending is temporarily paused. It resumes automatically; no action is needed." | Tras Retry-After; no requiere acción |
PLATFORM_DAILY_CAPACITY_REACHED | "Platform sending capacity for today is fully booked. This is a temporary platform-wide limit, not your account quota, and it resets at midnight UTC." | Tras Retry-After (próximas 00:00 UTC) |
PLATFORM_CAPACITY_PROTECTION | "New sending is briefly paused to protect platform capacity. Mail already accepted is not affected. This is transient and clears on its own; retry shortly." | Tras el Retry-After corto |
PROBATION_CAP_REACHED | "New accounts can send to N recipients per rolling 24 hours until our team has reviewed the account. Capacity returns as earlier sends age out of the 24-hour window; contact support to request a review." (o «…cannot be verified right now, so sending is briefly paused…» ante una interrupción breve) | Tras Retry-After, o solicite una revisión al soporte |
Los correos ya aceptados nunca se ven afectados. Trátelos como cualquier otro 429: espere, respete Retry-After y reintente. No hay nada que configurar ni ampliar.
Límites de Stream
transactional_recipient_limit_exceeded y marketing_recipient_limit_exceeded son 400, no 429: vea la sección Validación de Solicitud arriba. BATCH_NOT_ALLOWED_FOR_TRANSACTIONAL también es 400: un envío por lotes no está permitido en una credencial transaccional independientemente de los límites de velocidad.
Cuota y Facturación
| Código | Descripción |
|---|---|
QUOTA_EXCEEDED | Cuota de uso excedida para el período de facturación actual |
Motor de Políticas
| Código | Descripción |
|---|---|
SENDING_BLOCKED | El motor de políticas de tasa/calentamiento bloqueó este envío: nivel de verificación, la lista de permitidos de sandbox, una restricción de cuenta, o un pico de volumen inusual |
MARKETING_PAUSED | Los correos electrónicos de marketing están pausados para este espacio de trabajo |
Errores del Servidor (5xx)
| Código | Estado HTTP | Descripción |
|---|---|---|
INTERNAL_ERROR | 500 | Error interno inesperado del servidor |
AUTHENTICATION_FAILED | 500 | La validación de la clave API falló internamente (no es un inicio de sesión incorrecto, reintente) |
TIMEOUT | 504 | La operación agotó el tiempo de espera |
SERVICE_UNAVAILABLE | 503 | El servicio no está disponible temporalmente |
DATABASE_ERROR | 503 | Ocurrió un error de base de datos |
Los errores del servidor (5xx) son transitorios. Reintente la solicitud con retroceso exponencial. Si el error persiste, consulte la página de estado de MailLand o contacte a soporte.
Manejo de Errores
Estrategia de Reintentos
| Estado HTTP | ¿Reintentar? | Estrategia |
|---|---|---|
| 400 | No | Corrija la solicitud e inténtelo de nuevo |
| 401 | No | Verifique las credenciales o renueve su token |
| 403 | No | Verifique los permisos o actualice su plan |
| 404 | No | Verifique el ID del recurso |
| 409 | No | Resuelva el conflicto |
| 422 | No | Corrija el problema de lógica de negocio (por ejemplo, verifique el dominio) |
| 429 | Sí | Espere la duración de Retry-After, luego reintente |
| 500 | Sí | Reintente con retroceso exponencial (máx. 3 reintentos) |
| 503 | Sí | Reintente con retroceso exponencial (máx. 5 reintentos) |
Lectura de Encabezados de Límite de Velocidad
La mayoría de las respuestas incluyen X-RateLimit-Limit y X-RateLimit-Remaining:
| Encabezado | Descripción |
|---|---|
X-RateLimit-Limit | Máximo de solicitudes permitidas en la ventana actual |
X-RateLimit-Remaining | Solicitudes restantes en la ventana actual |
Un 429 basado en IP añade además:
| Encabezado | Descripción |
|---|---|
X-RateLimit-Reset | Marca de tiempo UTC en ISO-8601 cuando se restablece la ventana actual (solo respuestas de límite de IP) |
Retry-After | Segundos a esperar antes de reintentar |
Próximos Pasos
- Límites de Velocidad: niveles detallados de límites de velocidad y mejores prácticas
- Autenticación: administración de tokens y API keys
- Registro de Cambios: rastree cambios en la API