Bêta privéeMailbeam est en bêta privée : l'API publique n'est pas encore ouverte.Rejoindre la liste d'attente

Erreurs

Mailbeam utilise les codes de statut HTTP standards. Toute réponse d'erreur porte un champ error lisible par la machine et un message lisible par un humain.

Structure d'une réponse d'erreur

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

Testez toujours le champ error dans votre code : message peut changer, error est stable.

Codes de statut HTTP

CodeSignification
200La requête a réussi
400Requête incorrecte — vérifiez votre payload
401Échec de l'authentification
403Interdit — droits insuffisants
422Erreur de validation — l'adresse a un problème précis
413Corps de requête trop volumineux
429Limite de débit ou quota dépassé
500Erreur interne du serveur — contactez le support
503Capacité indisponible sur ce déploiement

Codes d'erreur

Erreurs d'authentification

ErreurStatutDescription
missing_api_key401Pas d'en-tête Authorization
invalid_api_key401Le format de la clé est invalide
revoked_api_key401La clé a été révoquée
insufficient_permissions403La clé n'a pas la portée requise

Erreurs de validation

ErreurStatutDescription
invalid_email_format422L'adresse ne respecte pas la syntaxe du RFC 5322
email_too_long422L'adresse dépasse 254 caractères
missing_required_field400Un champ obligatoire est absent du corps
invalid_json400Le corps de la requête n'est pas du JSON valide
invalid_request400Le JSON est bien formé mais la requête n'est pas valide — par exemple une URL de webhook qui n'est pas en HTTPS
payload_too_large413Le corps de la requête dépasse la taille limite de cet endpoint

Erreurs de limite de débit

ErreurStatutDescription
rate_limit_exceeded429Limite par seconde atteinte ; regardez retry_after
quota_exceeded429Quota mensuel épuisé (le forfait Free bloque ; les forfaits payants continuent en facturation de dépassement)

Erreurs serveur

ErreurStatutDescription
internal_error500Erreur serveur passagère — réessayez avec un backoff
service_unavailable503Une capacité n'est pas configurée sur ce déploiement
upstream_timeout504La sonde SMTP a expiré ; le résultat n'est pas concluant

Traiter les erreurs dans le code

try {
  const result = await verifyEmail(email);
  if (!result.valid) {
    // L'adresse est invalide, mais la requête a réussi — ce n'est PAS une erreur
    handleInvalidEmail(result.reason);
  }
} catch (err) {
  switch (err.code) {
    case "rate_limit_exceeded":
      await sleep(err.retryAfter * 1000);
      // réessai
      break;
    case "quota_exceeded":
      // Prévenir l'exploitation, basculer sur un repli, ou laisser passer l'inscription
      notifyOpsTeam();
      break;
    case "invalid_api_key":
    case "revoked_api_key":
      // Alerte — problème de configuration
      alertPagerDuty("Clé d'API Mailbeam invalide");
      break;
    default:
      // Journaliser et continuer — ne bloquez pas vos utilisateurs sur une erreur inattendue
      logger.error("Erreur Mailbeam", { code: err.code, requestId: err.requestId });
  }
}

Le champ reason

Quand valid vaut false, le champ reason porte une chaîne lisible par la machine qui explique pourquoi :

MotifExplication
invalid_syntaxÉchec du contrôle de format RFC 5322
no_mx_recordsLe domaine n'a pas de serveur de messagerie, ou publie un MX nul
domain_not_foundLe domaine ne se résout pas du tout
smtp_rejectedLa boîte n'existe pas
mailbox_fullLa boîte existe mais a dépassé son quota
disposable_domainCorrespond à un fournisseur d'adresses temporaires
role_addressRessemble à une adresse non personnelle
catch_all_unverifiableLe domaine accepte tout le courrier ; le SMTP n'est pas concluant
greylistedLe serveur nous a demandé de revenir plus tard — à traiter comme inconnu
smtp_blockedLe serveur a refusé notre sonde, pas l'adresse
smtp_unreachableAucun serveur de messagerie n'a répondu
timeoutLa sonde a expiré — à traiter comme inconnu

status face à valid

valid est un booléen, et deux états ne peuvent pas distinguer « cette boîte n'existe pas » de « nous n'avons pas pu savoir ». Servez-vous de status quand cette différence compte :

StatutSignificationvalid
deliverableLa boîte a été confirméetrue
undeliverableConfirmée mauvaise — syntaxe incorrecte, pas de route de messagerie, boîte rejetée, adresse jetablefalse
riskyRéelle mais de faible qualité — domaine catch-all, adresse fonctionnelle, boîte pleinefalse
unknownNous n'avons pas pu savoir : greylisting, sonde bloquée, expiration DNSfalse

Bloquer une inscription sur undeliverable est sans danger. Bloquer sur unknown bloque de vrais utilisateurs — servez-vous du score à la place.

Ne bloquez jamais un utilisateur sur le seul catch_all_unverifiable. Servez-vous du champ score pour prendre une décision nuancée.