MailLandDocs
Référence

Codes d'erreur

Référence complète des codes d'erreur de l'API Mail.Land et leur signification

Chaque réponse d'erreur de l'API MailLand inclut un champ code avec un code d'erreur lisible par machine et un champ message avec une description lisible par l'humain.

Format des réponses d'erreur

Réponse d'erreur
{
  "code": "DOMAIN_NOT_VERIFIED",
  "message": "Domain is not verified",
  "timestamp": "2026-02-18T12:35:00Z",
  "traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
}

Certaines erreurs incluent des details supplémentaires :

Réponse d'erreur avec détails
{
  "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"
  }
}

Validation de la requête (400)

Retourné lorsque le corps de la requête, les paramètres de requête ou les en-têtes sont malformés ou manquent de champs obligatoires.

CodeDescription
INVALID_REQUESTRequête invalide générale
VALIDATION_FAILEDUn ou plusieurs champs ont échoué la validation
INVALID_EMAIL_FORMATLe format de l'adresse email est invalide
WEBHOOK_DESTINATION_NOT_ALLOWEDUne URL de webhook est refusée par la politique de destination : les webhooks sont livrés uniquement en HTTPS sur le port 443 et ne peuvent pas pointer vers les serveurs, adresses ou noms d'hôte de MailLand
MISSING_CONTENTDéprécié depuis 2026-04. Utilisez VALIDATION_FAILED : les endpoints send/scheduled retournent désormais des erreurs de validation structurées.
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." : Le message dépasse la limite de taille de la plateforme. POST /v1/transactional/send et send-batch le renvoient en 413 ; rien n'est mis en file. Réduisez le message. Pour l'import CSV, c'est 400
transactional_recipient_limit_exceededPlus de 5 destinataires sur un identifiant transactionnel (code en minuscules)
marketing_recipient_limit_exceededPlus de 1 000 destinataires sur un identifiant marketing (code en minuscules)
VALIDATION_FAILEDEnvoi par lot avec plus de 10 000 destinataires
SEND_FAILEDL'opération d'envoi d'email a échoué, y compris « tous les destinataires sont supprimés »
BATCH_SEND_FAILEDL'opération d'envoi par lot a échoué
IDEMPOTENCY_KEY_INVALIDClé d'idempotence vide, mal formée, de plus de 255 caractères, ou en-tête envoyé plusieurs fois (send/send-batch uniquement)
IDEMPOTENCY_KEY_CONFLICTL'en-tête X-Idempotency-Key et le champ idempotencyKey ont tous deux été fournis et diffèrent
INVALID_CURSORLe paramètre de pagination par curseur est mal formé
PASSWORD_REQUIREDLa confirmation du mot de passe est requise
RECIPIENT_SUPPRESSEDLe destinataire est sur la liste de suppression

Authentification (401)

Retourné lorsque la requête ne contient pas d'identifiants ou que les identifiants sont invalides.

CodeDescription
UNAUTHORIZEDX-API-Key manquante, invalide, expirée ou révoquée : le middleware de clé API retourne ce seul code dans tous les cas, avec un message descriptif. Il ne distingue pas manquante/invalide/expirée/révoquée par le code. Un mot de passe de connexion incorrect retourne aussi 401 UNAUTHORIZED.
LOGIN_REQUIREDLa connexion est requise pour cette opération

Authentification à deux facteurs

Les échecs de 2FA retournent 400 INVALID_REQUEST avec un message descriptif (par ex. « Invalid code », « 2FA is already enabled »). Il n'existe pas de codes d'erreur 2FA dédiés, lisez le champ message.

Autorisation (403)

Retourné lorsque l'utilisateur authentifié n'a pas la permission d'effectuer l'action demandée.

CodeDescription
FORBIDDENAccès refusé général
INSUFFICIENT_PERMISSIONSL'utilisateur ne dispose pas du rôle ou de la permission requise
ACCOUNT_SUSPENDEDLe compte utilisateur a été suspendu
ACCOUNT_DISABLEDLe compte utilisateur a été désactivé
ACCOUNT_NOT_ACTIVELe compte utilisateur n'est pas actif
IP_NOT_ALLOWEDL'IP du client n'est pas dans la liste autorisée de l'identifiant
VALIDATION_CREDENTIAL_REQUIREDUne clé d'API Validation est requise pour les endpoints de validation d'e-mail. Une clé Envoi ou Réception est refusée ; une session connectée ou une clé du produit Validation est acceptée
PLAN_LIMIT_REACHEDLimite de ressources du forfait atteinte, mise à niveau requise
SENDING_BLOCKEDLe niveau de vérification du compte n'autorise pas cet envoi. Remarque : le refus SendingBlocked du moteur de politique lui-même est 403 ; le même code venant du chemin de politique de débit/préchauffage est 429, voir la section Moteur de politique ci-dessous.
SUBSCRIPTION_EXPIREDL'abonnement a expiré
NO_ACTIVE_SUBSCRIPTIONAucun abonnement actif trouvé
TENANT_APPROVAL_REQUIREDLe compte est en attente de revue avant de pouvoir envoyer. Réessayer n'aide pas ; contactez le support
MARKETING_NOT_YET_ALLOWEDL'envoi marketing n'est pas encore ouvert. Il s'ouvre automatiquement avec un historique transactionnel sain (au moins 500 e-mails transactionnels livrés sur au moins 7 jours, rebonds durs sous 2 % et plaintes sous 0,1 %)
MARKETING_SUSPENDEDL'e-mail marketing est temporairement indisponible sur toute la plateforme. L'e-mail transactionnel n'est pas affecté ; campagnes et automatisations sont conservées et reprennent à la réactivation du marketing
ACTION_REQUIREDUne action de l'utilisateur est requise avant que l'envoi puisse reprendre. Également renvoyé pour chaque envoi tant que l'espace de travail a un blocage de délivrabilité actif (dépassement du taux de rebond/plainte) : le relais SMTP renvoie 550 pour le même blocage. Voir Blocages de délivrabilité

Introuvable (404)

Retourné lorsque la ressource demandée n'existe pas ou appartient à un autre espace de travail.

CodeDescription
RESOURCE_NOT_FOUNDRessource générique introuvable
USER_NOT_FOUNDL'utilisateur n'existe pas
WEBHOOK_NOT_FOUNDLe webhook n'existe pas
DELIVERY_NOT_FOUNDLa livraison webhook n'existe pas

La plupart des réponses 404 utilisent le code RESOURCE_NOT_FOUND. Le champ message fournit le contexte sur la ressource introuvable (par exemple "Domain not found", "Template not found", "Campaign not found"). Les endpoints webhook font exception : relancer une livraison webhook utilise WEBHOOK_NOT_FOUND / DELIVERY_NOT_FOUND.

Conflit (409)

Retourné lorsque l'opération entre en conflit avec l'état actuel de la ressource.

CodeDescription
CONFLICTConflit de ressource général
IDEMPOTENCY_KEY_REUSEDClé d'idempotence déjà utilisée pour un autre endpoint de ce compte (send/send-batch uniquement)

Domaine et envoi (422)

Retourné lorsque la requête est bien formée mais ne peut pas être traitée en raison de contraintes de logique métier.

CodeDescription
DOMAIN_NOT_FOUNDLe domaine n'existe pas dans l'espace de travail
DOMAIN_NOT_VERIFIEDLe domaine n'a pas été vérifié, complétez d'abord la configuration DNS
DOMAIN_NOT_ALLOWED_FOR_CREDENTIALL'identifiant n'est pas autorisé pour ce domaine d'expéditeur
CAMPAIGN_LINK_BLOCKEDUn lien d'une campagne pointe vers une destination signalée comme dangereuse ; la campagne n'est ni planifiée ni envoyée
DOMAIN_SUSPENDEDLe domaine a été suspendu
DOMAIN_VERIFICATION_EXPIREDLa vérification du domaine a expiré, re-vérifiez

Paiement requis (402)

Retourné lorsque le solde de crédit de l'espace de travail ne peut pas couvrir l'opération demandée.

CodeDescription
INSUFFICIENT_CREDITSPas assez de crédits pour effectuer l'opération

Limitation de taux (429)

Retourné lorsque la requête dépasse les limites de taux. Inclut généralement l'en-tête Retry-After ; s'il est absent, utilisez un backoff exponentiel plutôt que de supposer qu'aucune attente n'est nécessaire.

Limites de taux de l'API

CodeDescription
RATE_LIMIT_EXCEEDEDLimite de taux générale de l'API dépassée
IP_RATE_LIMIT_EXCEEDEDLimite de taux basée sur l'IP dépassée
SUPPORT_RATE_LIMITEDLimite de taux de l'API de support dépassée
TOO_MANY_LOGIN_ATTEMPTSTrop de tentatives de connexion échouées, verrouillage temporaire

Limites de taux d'envoi d'emails

CodeDescription
DAILY_LIMIT_EXCEEDEDLimite quotidienne d'envoi d'emails dépassée
WARMUP_LIMIT_EXCEEDEDLa limite quotidienne de montée en charge de l'envoi du compte est atteinte ; réinitialisation à 00:00 UTC (voir Préchauffage des IP)
PAYMENT_DAILY_LIMIT_EXCEEDEDLimite quotidienne atteinte sur un compte en retard de paiement

Capacité de la plateforme (429)

Ces refus signifient que c'est la plateforme, et non le quota de votre compte, qui limite actuellement les nouveaux envois. Chacun est un 429 avec un en-tête Retry-After, rien n'a été mis en file et il est sûr de réessayer la même requête. Par SMTP, ce sont des 421 Try again later: <message> transitoires. Le message est le texte anglais renvoyé par l'API.

Codemessage (tel que renvoyé)Quand réessayer
WARMUP_POOL_BUDGET_EXCEEDED"Sending is temporarily paused for today. It resumes automatically at 00:00 UTC; no action is needed."Après Retry-After (prochain 00:00 UTC)
WARMUP_POOL_BUDGET_EXCEEDED"Sending is briefly delayed. Please retry in a few minutes." (même code, lorsque la capacité de la plateforme ne peut être vérifiée un instant)Après le court Retry-After
WARMUP_POOL_EMPTY"Sending is temporarily paused. It resumes automatically; no action is needed."Après Retry-After ; aucune action requise
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."Après Retry-After (prochain 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."Après le court Retry-After
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." (ou « …cannot be verified right now, so sending is briefly paused… » lors d'une brève interruption)Après Retry-After, ou demandez une revue au support

Les e-mails déjà acceptés ne sont jamais affectés. Traitez-les comme tout autre 429 : temporisez, respectez Retry-After et réessayez. Il n'y a rien à configurer ni à mettre à niveau.

Limites par flux

transactional_recipient_limit_exceeded et marketing_recipient_limit_exceeded sont en 400, pas en 429 : voir la section Validation de la requête ci-dessus. BATCH_NOT_ALLOWED_FOR_TRANSACTIONAL est également en 400 : un envoi par lot n'est pas autorisé sur un identifiant transactionnel, quelles que soient les limites de taux.

Quota et facturation

CodeDescription
QUOTA_EXCEEDEDQuota d'utilisation dépassé pour la période de facturation en cours

Moteur de politique

CodeDescription
SENDING_BLOCKEDLe moteur de politique de débit/préchauffage a bloqué cet envoi : niveau de vérification, liste d'autorisation sandbox, restriction de compte, ou pic de volume inhabituel
MARKETING_PAUSEDLes emails marketing sont en pause pour cet espace de travail

Erreurs serveur (5xx)

CodeStatut HTTPDescription
INTERNAL_ERROR500Erreur interne inattendue du serveur
AUTHENTICATION_FAILED500La validation de la clé API a échoué en interne (pas un mauvais mot de passe, réessayez)
TIMEOUT504L'opération a expiré
SERVICE_UNAVAILABLE503Le service est temporairement indisponible
DATABASE_ERROR503Une erreur de base de données s'est produite

Les erreurs serveur (5xx) sont transitoires. Retentez la requête avec un backoff exponentiel. Si l'erreur persiste, consultez la page de statut MailLand ou contactez le support.

Gestion des erreurs

Stratégie de nouvelle tentative

Statut HTTPRetenter ?Stratégie
400NonCorrigez la requête et réessayez
401NonVérifiez les identifiants ou renouvelez votre token
403NonVérifiez les permissions ou mettez à niveau votre forfait
404NonVérifiez l'ID de la ressource
409NonRésolvez le conflit
422NonCorrigez le problème de logique métier (par ex. vérifiez le domaine)
429OuiAttendez la durée Retry-After, puis retentez
500OuiRetentez avec un backoff exponentiel (max 3 tentatives)
503OuiRetentez avec un backoff exponentiel (max 5 tentatives)

Lecture des en-têtes de limitation de taux

La plupart des réponses incluent X-RateLimit-Limit et X-RateLimit-Remaining :

En-têteDescription
X-RateLimit-LimitMaximum de requêtes autorisées dans la fenêtre actuelle
X-RateLimit-RemainingRequêtes restantes dans la fenêtre actuelle

Un 429 basé sur l'IP ajoute en plus :

En-têteDescription
X-RateLimit-ResetHorodatage UTC au format ISO-8601 de la réinitialisation de la fenêtre actuelle (réponses de limite IP uniquement)
Retry-AfterSecondes d'attente avant de retenter

Prochaines étapes

Sur cette page