Référence

Erreurs

Chaque erreur de l’API a un statut HTTP et un code stable. Les codes généraux peuvent venir de n’importe quel appel ; les autres sont propres à un produit.

Codes d’erreur généraux

Chaque erreur est un objet JSON plat : code, message (suit Accept-Language), messageEn, messageFr, statusCode, et un champ details facultatif précisant la cause. Une requête mal formée, comme un champ manquant ou une valeur hors des limites documentées, retourne 422 VALIDATION_ERROR avec details qui nomme le champ. Une requête que le framework rejette lui-même avant que votre code ne s’exécute, comme un JSON invalide (400), un corps dépassant la limite de taille (413) ou un type de contenu non pris en charge (415), retourne un code Fastify FST_ERR_* avec un message uniquement en anglais.

HTTPCodeSignification
401UNAUTHORIZEDClé API manquante ou invalide
401API_KEY_REVOKEDCette clé API a été révoquée. Utilisez une autre clé.
402INSUFFICIENT_BALANCESolde du compte insuffisant
402PAYMENT_REQUIREDLe compte n’a pas encore effectué sa première recharge. Les clés de production sont bloquées jusque-là, sauf quelques lectures de compte et de tarifs ; les clés de test ne sont pas concernées.
403FORBIDDENLa clé API n’a pas la permission requise, skip_consent_check a été envoyé avec une clé de production, le compte est suspendu ou fermé (voir details.reason), ou l’identifiant dans le chemin appartient à un autre compte
403LIVE_KEY_REQUIREDUne clé de test a été utilisée pour une action réservée aux clés de production.
403PERMISSION_ESCALATIONUne clé nouvelle ou renouvelée a demandé des permissions plus étendues que celles de l’appelant, sans confirmation par mot de passe.
403KEY_FENCEDCette clé est restreinte par ses propres listes d’autorisation ou de blocage ou par le refus par défaut ; elle ne peut donc pas modifier ces listes ni les groupes et contacts qu’elles incluent, changer les réglages de listes d’une clé, créer de clés, ni renouveler une autre clé qu’elle-même.
403ACCOUNT_NOT_VERIFIEDLe compte n’a pas encore vérifié de numéro de téléphone propriétaire, requis avant un envoi réel.
403SENDING_PAUSEDL’envoi réel est suspendu sur ce compte (les détails indiquent la reprise et la raison)
404NOT_FOUNDAucune ressource ne correspond à l’identifiant donné.
409DEAD_LETTER_ALREADY_REPLAYEDCet événement a déjà été rejoué, ou un rejeu est en cours. Rien n’a été envoyé, et réessayer n’y changera rien.
409CONFLICTUne ressource avec cet identifiant existe déjà, ou le renouvellement d’une clé a échoué parce qu’elle était déjà révoquée, est une clé de session, ou qu’une autre requête l’a renouvelée en premier
422VALIDATION_ERRORÉchec de la validation du corps ou de la requête (voir details)
422WEBHOOK_LIMIT_REACHEDLimite de 10 points de terminaison webhook par compte atteinte. Supprimez-en un avant d’en enregistrer un autre
429RATE_LIMITEDTrop de requêtes. Veuillez ralentir
500INTERNAL_ERRORUne erreur serveur inattendue s’est produite. Réessayez
502WEBHOOK_REPLAY_FAILEDLe point de terminaison n’a pas accepté le rejeu. L’évènement reste dans la file des lettres mortes
503SERVICE_UNAVAILABLELes nouvelles inscriptions sont temporairement désactivées (POST /v1/accounts), ou la vérification téléphonique est temporairement indisponible (POST /v1/accounts/:id/phone-verification). Réessayez plus tard

Les codes propres à un produit ont leurs propres sections plus bas : codes d’erreur SMS et codes d’erreur du courriel.

Codes d’erreur SMS

Les codes ci-dessous sont propres aux SMS, aux numéros de téléphone, à la vérification et à la LCAP. Tout appel peut aussi répondre avec les codes de la section générale ci-dessus, comme VALIDATION_ERROR, INSUFFICIENT_BALANCE et NOT_FOUND.

HTTPCodeSignification
403NUMBER_LIMIT_REACHEDLe compte a atteint sa limite de numéros de téléphone
403PHONE_NUMBER_NOT_OWNEDLe numéro from n’est pas provisionné sur ce compte.
403ALLOW_LIST_BLOCKEDLe destinataire ne figure pas sur la liste ALLOW de cette clé API
403DENY_LIST_BLOCKEDLe destinataire figure sur la liste DENY de cette clé API
403SEND_LIMIT_REQUEST_TOO_EARLYLes demandes de volume s’ouvrent une fois la période probatoire du compte terminée.
404VERIFICATION_NOT_FOUNDIdentifiant de vérification introuvable ou non associé à ce compte
404CONTACT_NOT_FOUNDContact introuvable
404CONTACT_GROUP_NOT_FOUNDGroupe de contacts introuvable
404CONTACT_GROUP_MEMBER_NOT_FOUNDCe contact n’est pas membre de ce groupe
404CONTACT_LIST_NOT_FOUNDListe de contacts introuvable
404CONTACT_LIST_ENTRY_NOT_FOUNDEntrée de liste introuvable
409VERIFICATION_ALREADY_VERIFIEDCe numéro a déjà été vérifié
409PURCHASE_IN_PROGRESSUn autre achat de numéro est en cours. Réessayez sous peu
409ALLOWANCE_REQUEST_PENDINGUne demande d'allocation est déjà en attente d'examen
409PHONE_NUMBER_SUSPENDEDLes frais mensuels de ce numéro n’ont pas pu être prélevés. Rechargez votre solde pour le réactiver.
409SEND_LIMIT_REQUEST_PENDINGUne demande de volume est déjà en attente d’examen.
409IDEMPOTENCY_KEY_REUSEDLa même clé Idempotency-Key a été envoyée avec un to, from ou body différent.
409CONTACT_ALREADY_EXISTSUn contact avec ce numéro de téléphone ou ce courriel existe déjà
409CONTACT_IN_USERetirez le contact de ses groupes et de ses listes avant d’effacer son numéro de téléphone
409CONTACT_GROUP_ALREADY_EXISTSUn groupe de contacts avec ce nom existe déjà
409CONTACT_GROUP_MEMBER_EXISTSLe contact est déjà membre de ce groupe
409CONTACT_LIST_ALREADY_EXISTSUne liste de contacts avec ce nom existe déjà
409CONTACT_LIST_ENTRY_EXISTSCette entrée existe déjà dans la liste
410VERIFICATION_EXPIREDLe code de vérification a expiré
422NON_CANADIAN_NUMBERNuméro E.164 canadien invalide
422UNDELIVERABLE_NUMBERLe numéro a échoué trois fois de suite chez l’opérateur (tous clients confondus) ; refusé sans frais pendant 90 jours.
422NOT_A_MOBILE_NUMBERLe numéro de destination est une ligne fixe ou un numéro VoIP. L’opérateur le refuse avant l’envoi ; rien n’est facturé.
422RESERVED_DESTINATIONLe numéro de destination appartient à un central réservé (555-XXXX, N11, codes de test des opérateurs). Refusé avant tout envoi ; rien n’est facturé.
422MESSAGE_TOO_LONGLe texte dépasserait la limite de 10 parties SMS de l'opérateur (≈1 530 caractères GSM-7 ou 670 caractères Unicode). Rien n'est facturé
422VERIFICATION_INVALID_CODECode incorrect. attempts_remaining indique le nombre de tentatives restantes
422INVALID_ALLOWANCE_REQUESTL'allocation demandée doit dépasser votre limite actuelle
422LINK_SHORTENER_BLOCKEDLes raccourcisseurs de liens sont refusés car les opérateurs les filtrent. Utilisez l’URL complète
422BROADCAST_TOO_LARGEGroupe de contacts trop grand pour une seule diffusion (250 membres par défaut). Divisez-le et envoyez par lots
422CANNOT_ERASE_OWN_NUMBERCe numéro appartient à votre compte. L’effacement vise uniquement le numéro d’un abonné
422TOO_MANY_AREA_CODESRecherchez au plus 25 indicatifs régionaux à la fois
422INVALID_PHONE_NUMBERNuméro de téléphone E.164 invalide
422CONTACT_LIST_ENTRY_INVALIDChaque entrée doit spécifier exactement l’un des champs phone_number, contact_id ou contact_group_id
422CONTACT_HAS_NO_PHONELe contact n’a pas de numéro de téléphone ; il ne peut donc pas être ajouté à un groupe ou à une liste SMS
429RECIPIENT_RATE_LIMITEDPlus de 30 messages vers un même destinataire en une heure ou 100 en une journée ; réessayez après l’en-tête Retry-After.
429VERIFICATION_MAX_ATTEMPTSTrop de tentatives incorrectes. Cette vérification est verrouillée
429DAILY_LIMIT_REACHEDLimite d’envoi quotidienne atteinte (les détails indiquent votre limite et le compte). Demandez un volume plus élevé une fois admissible
429FANOUT_LIMIT_REACHEDCe message identique a déjà atteint le nombre maximal de destinataires distincts autorisé sur 24 heures
429NUMBER_RATE_LIMITEDCe numéro d’envoi a atteint sa limite par minute. Réessayez sous peu
429BROADCAST_LIMIT_REACHEDLimite de diffusions atteinte pour ce compte au cours des 24 dernières heures
451OPT_OUT_BLOCKEDLe destinataire s’est désabonné. L’envoi est donc bloqué par la loi.
451NO_CONSENTPas de consentement LCAP valide en dossier
451CONSENT_EXPIREDConsentement tacite expiré (limite LCAP de 2 ans)
451DNCL_BLOCKEDNuméro sur la LNNTE du CRTC sans exemption applicable (à venir; non retourné actuellement)
501DNCL_COMING_SOONLa vérification de la liste nationale de numéros de télécommunication exclus du CRTC n’est pas encore disponible.
501TOLLFREE_800_COMING_SOONLes numéros 1-800 ne sont pas encore disponibles. Choisissez un autre préfixe sans frais ou un numéro local.
502CARRIER_ERRORL’opérateur a renvoyé une erreur lors de l’envoi.
502PROVISIONING_FAILEDL’opérateur n’a pas pu compléter cet achat de numéro. Rien n’a été facturé.
502NUMBER_SEARCH_FAILEDLa recherche de numéros est temporairement indisponible.
502RELEASE_FAILEDL’opérateur n’a pas accepté la libération. Le numéro vous appartient toujours ; réessayez sous peu
503CARRIER_UNAVAILABLEL’opérateur est injoignable ; rien n’a été envoyé ni facturé. Réessayez sous peu.
503CARRIER_TIMEOUTL’opérateur n’a pas répondu à temps : le message a peut-être été envoyé, ou non. Rien n’est facturé. Vérifiez le statut du message avant de l’envoyer de nouveau : une nouvelle tentative avec la même Idempotency-Key renvoie le message en échec au lieu de l’envoyer une seconde fois.

Codes d’erreur du courriel

Les appels de courriel peuvent aussi répondre avec les codes de la section générale ci-dessus, comme VALIDATION_ERROR, INSUFFICIENT_BALANCE et NOT_FOUND.

HTTPCodeSignification
403EMAIL_DOMAIN_NOT_ALLOWEDLa clé API est restreinte à certains domaines d’envoi, et celui-ci n’en fait pas partie.
403TEST_KEY_REQUIREDSeule une clé de test peut appeler ce point de terminaison.
404RECEIVED_EMAIL_NOT_FOUNDAucun courriel reçu avec cet identifiant.
409EMAIL_DOMAIN_ALREADY_EXISTSLe domaine est déjà sur ce compte.
409EMAIL_DOMAIN_IN_USEUn autre compte détient ce domaine. details.retry_after indique quand une revendication non vérifiée expire ; un domaine vérifié reste à son propriétaire.
409EMAIL_DOMAIN_HAS_INFLIGHTLe domaine a encore des courriels en file, programmés ou en cours d’envoi.
409EMAIL_IDEMPOTENCY_IN_PROGRESSUne requête utilisant cette clé Idempotency-Key est encore en cours de traitement. Réessayez la même clé sous peu plutôt que d’en utiliser une nouvelle.
409EMAIL_TEMPLATE_ALIAS_TAKENUn autre modèle de ce compte utilise déjà cet alias.
409EMAIL_TEMPLATE_IN_USEUn courriel programmé utilise ce modèle. Annulez-le, ou attendez qu’il soit envoyé, puis supprimez le modèle.
409RECEIVING_REQUIRES_VERIFIED_DOMAINLe domaine doit être vérifié pour l’envoi avant que la réception puisse être activée.
410ATTACHMENT_EXPIREDLa pièce jointe ou le message brut a dépassé sa fenêtre de conservation de 40 jours.
413EMAIL_ATTACHMENT_TOO_LARGELes pièces jointes dépassent 25 Mo.
422EMAIL_INVALID_ADDRESSUne adresse n’est pas une adresse courriel valide.
422EMAIL_DOMAIN_NOT_VERIFIEDLe domaine de l’expéditeur n’est pas un domaine d’envoi vérifié de ce compte.
422EMAIL_DOMAIN_INVALIDNom de domaine invalide.
422EMAIL_DOMAIN_LIMIT_REACHEDCe compte a atteint sa limite de domaines d’envoi (5 par défaut ; les domaines en échec ne comptent pas). Répondu à l’ajout d’un domaine, ou à la vérification d’un domaine en échec qui reprendrait une place. Retirez-en un ou demandez au soutien de l’augmenter.
422EMAIL_TEST_ADDRESS_LIVE_KEYUne clé réelle ne peut pas envoyer à une adresse sur test.honkio.ca ; ces adresses sont réservées aux clés de test.
422EMAIL_HEADER_INVALIDL’adresse d’expéditeur ou un en-tête est mal formé, ou est un en-tête que honkio définit lui-même.
422EMAIL_ATTACHMENT_FETCH_FAILEDUne pièce jointe fournie par path n’a pas pu être récupérée. details.reason indique pourquoi : blocked_address, http_status, timeout, too_large ou network.
422EMAIL_ATTACHMENT_TYPE_BLOCKEDLa pièce jointe est un exécutable ou un script (.exe, .js, .bat, .jar et similaires), un type que les serveurs de courriel destinataires refusent. details.filename l’identifie. Rien n’est facturé.
422EMAIL_RENDER_FAILEDLe contenu n’a pas pu être généré.
422EMAIL_BATCH_TOO_LARGETrop de destinataires dans un seul appel.
422EMAIL_COMMERCIAL_MULTI_RECIPIENTUn courriel commercial va à un seul destinataire. Utilisez un envoi groupé pour en joindre plusieurs.
422EMAIL_NOT_SCHEDULEDSeul un courriel programmé peut être déplacé ou annulé.
422EMAIL_TEMPLATE_NOT_PUBLISHEDLe modèle n’a pas encore de version publiée. Publiez-le avant de l’utiliser pour un envoi.
422EMAIL_TEMPLATE_VARIABLE_MISSINGUne variable du modèle n’a ni valeur ni valeur de repli. details.keys énumère celles qui manquent.
422EMAIL_TEMPLATE_UNDECLARED_VARIABLELe corps du modèle utilise une variable qu’il ne déclare pas. Ajoutez-la à variables ; details.keys les énumère.
422EMAIL_TEMPLATE_LIMIT_REACHEDCe compte a atteint la limite de 200 modèles de courriel. Supprimez-en un pour en créer un autre.
422SIMULATE_RECIPIENT_NOT_OWNEDChaque destinataire simulé doit être votre adresse de test ou un domaine que ce compte possède en mode test.
422INBOUND_ADDRESS_DISABLEDVotre adresse entrante gérée est désactivée. Réactivez-la avant d’y envoyer.
451EMAIL_SUPPRESSEDLe destinataire figure sur votre liste de suppression.
451EMAIL_NO_CONSENTLe courriel commercial exige un consentement LCAP enregistré pour le destinataire.
451EMAIL_OPT_OUT_BLOCKEDLe destinataire s’est désabonné de cet expéditeur.
503EMAIL_ATTACHMENTS_UNCONFIGUREDLe stockage des pièces jointes n’est pas configuré, donc les courriels avec pièces jointes ne peuvent pas être envoyés pour le moment.

Codes d’échec de livraison

Ces codes ne sont jamais une réponse HTTP : l’appel a déjà répondu 201 avant que SES tente l’envoi. Si la livraison échoue quand même, l’un d’eux apparaît comme failure_code sur le webhook email.failed ou email.rejected, et les frais sont remboursés.

CodeSignification
SES_THROTTLINGSES a limité le débit d’envoi ; le courriel a échoué et a été remboursé ; renvoyez-le.
SES_MESSAGE_REJECTEDSES a rejeté le message d’emblée, par exemple un contenu mal formé ; le courriel a échoué et a été remboursé ; corrigez le contenu et renvoyez-le.
SES_DOMAIN_NOT_VERIFIEDSES n’avait pas terminé de vérifier le domaine d’expéditeur, même si la vérification de honkio avait réussi ; le courriel a échoué et a été remboursé ; attendez la fin de la vérification, puis renvoyez-le.
SES_ERRORUne erreur SES qui ne correspond à aucun autre code ; le courriel a échoué et a été remboursé ; renvoyez-le.
EMAIL_ATTACHMENTS_UNAVAILABLELes octets de la pièce jointe stockée n’ont pas pu être lus au moment de l’envoi ; le courriel a échoué et a été remboursé ; renvoyez-le.