Beta privadaMailbeam está en beta privada: la API pública todavía no está abierta.Únete a la lista de espera

Errores

Mailbeam usa códigos de estado HTTP estándar. Todas las respuestas de error incluyen un campo error legible por máquina y un message legible por personas.

Estructura de una respuesta de error

{
  "error": "invalid_email_format",
  "message": "The email address is not RFC 5322 compliant.",
  "request_id": "req_01hx9abc123"
}

En tu código comprueba siempre el campo error: message puede cambiar, error es estable.

Códigos de estado HTTP

CódigoSignificado
200La petición ha ido bien
400Petición incorrecta: revisa el cuerpo
401Ha fallado la autenticación
403Prohibido: permisos insuficientes
422Error de validación: la dirección tiene un problema concreto
413El cuerpo de la petición es demasiado grande
429Límite de tasa o cuota superados
500Error interno del servidor: contacta con soporte
503Capacidad no disponible en este despliegue

Códigos de error

Errores de autenticación

ErrorEstadoDescripción
missing_api_key401No hay cabecera Authorization
invalid_api_key401El formato de la clave no es válido
revoked_api_key401La clave ha sido revocada
insufficient_permissions403La clave no tiene el alcance necesario

Errores de validación

ErrorEstadoDescripción
invalid_email_format422El email no cumple la sintaxis del RFC 5322
email_too_long422El email supera los 254 caracteres
missing_required_field400Falta un campo obligatorio en el cuerpo
invalid_json400El cuerpo de la petición no es JSON válido
invalid_request400El JSON está bien formado pero no es válido: por ejemplo, una URL de webhook que no es HTTPS
payload_too_large413El cuerpo supera el límite de tamaño de ese endpoint

Errores de límite de tasa

ErrorEstadoDescripción
rate_limit_exceeded429Límite por segundo alcanzado; mira retry_after
quota_exceeded429Cuota mensual agotada (el plan Free bloquea; los de pago siguen con facturación por exceso)

Errores de servidor

ErrorEstadoDescripción
internal_error500Error transitorio del servidor: reintenta con retroceso
service_unavailable503Una capacidad no está configurada en este despliegue
upstream_timeout504El sondeo SMTP ha agotado el tiempo; el resultado no es concluyente

Gestionar los errores en tu código

try {
  const result = await verifyEmail(email);
  if (!result.valid) {
    // El email es inválido pero la petición ha ido bien: esto NO es un error
    handleInvalidEmail(result.reason);
  }
} catch (err) {
  switch (err.code) {
    case "rate_limit_exceeded":
      await sleep(err.retryAfter * 1000);
      // reintenta
      break;
    case "quota_exceeded":
      // Avisa a operaciones, usa un plan B o deja pasar el registro
      notifyOpsTeam();
      break;
    case "invalid_api_key":
    case "revoked_api_key":
      // Alerta: es un problema de configuración
      alertPagerDuty("clave de API de Mailbeam no válida");
      break;
    default:
      // Registra y continúa: no bloquees usuarios por errores inesperados
      logger.error("Error de Mailbeam", { code: err.code, requestId: err.requestId });
  }
}

El campo reason

Cuando valid es false, el campo reason contiene una cadena legible por máquina que explica por qué:

MotivoExplicación
invalid_syntaxNo pasa la comprobación de formato del RFC 5322
no_mx_recordsEl dominio no tiene servidores de correo, o publica un MX nulo
domain_not_foundEl dominio no resuelve en absoluto
smtp_rejectedEl buzón no existe
mailbox_fullEl buzón existe pero ha superado su cuota
disposable_domainCoincide con un proveedor de email temporal
role_addressParece una dirección no personal
catch_all_unverifiableEl dominio acepta todo el correo; SMTP no es concluyente
greylistedEl servidor nos ha pedido volver más tarde: trátalo como desconocido
smtp_blockedEl servidor ha rechazado nuestro sondeo, no la dirección
smtp_unreachableNingún servidor de correo ha respondido
timeoutEl sondeo ha agotado el tiempo: trátalo como desconocido

status frente a valid

valid es un booleano, y con dos estados no se puede distinguir «este buzón no existe» de «no hemos podido averiguarlo». Usa status cuando esa diferencia importe:

EstadoSignificadovalid
deliverableEl buzón ha quedado confirmadotrue
undeliverableConfirmado como malo: sintaxis errónea, sin ruta de correo, buzón rechazado, desechablefalse
riskyReal pero de baja calidad: dominio catch-all, dirección de rol, buzón llenofalse
unknownNo hemos podido averiguarlo: greylisting, sondeo bloqueado, tiempo de DNS agotadofalse

Bloquear registros por undeliverable es seguro. Bloquear por unknown bloquea usuarios reales: usa el score en su lugar.

No bloquees nunca a un usuario solo por catch_all_unverifiable. Usa el campo score para tomar decisiones con matices.