Aller au contenu

Tape un mot pour chercher dans les pages.

↑↓ Choisir↵ OuvrirÉchap Fermer

Référence

La forme des erreurs de l'API, leurs codes, leurs causes, et quand réessayer une requête sans risque de doublon.

Une erreur a toujours la même forme. Le statut HTTP dit la catégorie, name dit le cas précis, et message dit quoi corriger, en français.

{
"statusCode": 422,
"name": "validation_error",
"message": "template.variables : valeur manquante pour prenom"
}

Dans message, le nom du champ vient en premier, suivi de : quand l’erreur vient d’un champ. Une erreur de corps ne signale que la première faute trouvée.

Codes

StatutnameCauseQue faire
401missing_api_keyL’en-tête Authorization manque, ou ne commence pas par Bearer .Ajoute Authorization: Bearer am_….
401restricted_api_keyLa clé est « envoi seulement » et la route n’est ni un envoi ni la lecture de ses propres e-mails (GET /emails/:id).Utilise une clé à accès complet pour cette route, créée dans Clés d’API.
403invalid_api_keyLa clé est inconnue ou a été révoquée.Vérifie la clé. Si elle a été révoquée, crée-en une dans Clés d’API. Ne réessaie pas tel quel.
403account_suspendedLes envois de ton espace sont suspendus. Rien n’est parti.Ne réessaie pas. Écris à support@hgdc.ch pour rétablir les envois. Les campagnes et les workflows en cours attendent.
403sending_pausedLes envois sont en pause après trop de messages non remis ou signalés. Rien n’est parti.Ne réessaie pas. HGDC te contacte pour vérifier ta liste, puis reprend les envois. Voir Limites.
403account_under_reviewTon espace attend sa validation par HGDC : il ne peut écrire qu’à ses propres membres pour l’instant. Rien n’est parti.Attends l’e-mail de validation, en général dans la journée. Voir Limites.
404not_foundL’élément n’existe pas dans ton espace, ou le chemin est mal formé.Vérifie l’identifiant.
422validation_errorLe corps est invalide : champ manquant, trop long, mauvais type, champ non pris en charge (attachments, scheduled_at, react, topic_id), domaine d’expédition non vérifié, variable de modèle sans valeur, modèle sans contenu, campagne déjà partie.Corrige la requête. La rejouer à l’identique donne la même erreur.
413payload_too_largeLe corps dépasse le plafond : 2,5 Mo pour un e-mail ou une autre route, 10 Mo pour POST /emails/batch. Un formulaire, lui, s’arrête à 64 Ko.Allège le contenu (images hébergées plutôt qu’intégrées) ou découpe le lot.
429rate_limit_exceededTrop de requêtes en peu de temps : plus de 600 requêtes par minute, ou écritures trop rapprochées.Attends quelques secondes, puis réessaie.
429daily_quota_exceededLa limite de destinataires du jour de ton espace est atteinte.Ne réessaie pas avant le lendemain. Besoin de plus ? Demande une hausse dans Réglages.
500internal_server_errorErreur de notre côté. Le message dit « Erreur interne, réessaie. ».Réessaie avec la même Idempotency-Key.

Un 422 peut aussi venir d’une règle métier, comme Cette adresse n'a pas l'air valide. ou Liste introuvable : …. Le texte de message dit alors quelle donnée changer.

Réessayer sans doublon

Un nouvel essai ne crée pas de doublon quand la requête a une Idempotency-Key, ou quand l’action est sans effet de bord.

RequêteRéessayer ?Comment
POST /emails, POST /emails/batchOui, sur 429 rate_limit_exceeded et 500.Garde la même Idempotency-Key. Sans clé, un nouvel appel peut envoyer deux fois.
POST /contacts, PATCH /contacts/…Oui.Sans risque : une même adresse est mise à jour, jamais dupliquée.
GET, DELETEOui.Sans effet de bord répété.
POST /lists, POST /broadcastsNon, à l’aveugle.Un second appel crée un second objet. Vérifie d’abord avec GET /lists ou GET /broadcasts.
POST /broadcasts/:id/sendNon, à l’aveugle.Une campagne déjà partie répond 422, mais vérifie d’abord avec GET /broadcasts/:id.
Toute requête en 401, 403, 404, 422Non.La requête ne changera pas.
429 daily_quota_exceededNon avant le lendemain.Le quota ne se libère pas en quelques secondes.

Pour un lot, la clé se décline par position : <clé>:0, <clé>:1, etc. Si le lot s’arrête à mi-chemin, relance-le avec la même clé : les e-mails déjà créés renvoient leur id, et seuls les autres partent.

Délai entre deux essais

En cas de 429 rate_limit_exceeded, attends quelques secondes avant de réessayer. Le SDK TypeScript attend 0,5 s, puis 1 s, et respecte l’en-tête Retry-After quand la réponse le contient.

Une erreur réseau, sans réponse du tout, se réessaie comme un 500, avec la même clé. Le SDK fait ces réessais seul, sur 429, 500 et erreur réseau.

Si ça ne marche pas

  • Tu reçois 401 missing_api_key alors que la clé est définie : ta variable d’environnement n’arrive pas à ton processus, ou l’en-tête ne commence pas par Bearer (un espace est obligatoire).
  • Tu reçois 403 invalid_api_key après une mise en production : la clé de test ou une clé révoquée est encore dans la configuration. Remplace-la par une clé active.