RÉFÉRENCE API

Erreurs

L'API renvoie des codes HTTP standards. Toute erreur porte un corps JSON de la même forme, produite par le framework NestJS.

Forme du corps d’erreur

statusCode reprend le code HTTP, error son libellé standard, et message est soit une phrase en français décrivant la cause précise, soit — pour certaines erreurs de validation — un tableau de phrases (un message par champ invalide).

403 Forbidden
{
  "statusCode": 403,
  "message": "Le domaine d'envoi n'est pas vérifié : ajoutez-le à votre compte et validez ses enregistrements DNS avant d'envoyer.",
  "error": "Forbidden"
}
400 Bad Request
{
  "statusCode": 400,
  "message": [
    "Le sujet est obligatoire et ne doit pas dépasser 300 caractères."
  ],
  "error": "Bad Request"
}

Codes HTTP

400Bad RequestRequête mal formée
  • Paramètre manquant, mal typé ou hors bornes (POST /v1/emails : from, to, subject, html/text).
  • Nom de domaine syntaxiquement invalide sur POST /v1/domains.
  • Nom de clé API vide ou trop long sur POST /v1/api-keys.
  • Pack de recharge inconnu, méthode de paiement invalide, ou numéro de téléphone mal formé sur POST /v1/billing/topup-requests.
  • Paramètre de pagination (page, limit) non numérique ou hors bornes.
401UnauthorizedAuthentification manquante ou invalide
  • En-tête Authorization absent, mal formé, ou clé API inconnue/révoquée (routes API key).
  • Session absente ou expirée (routes tableau de bord, authentifiées par cookie).
402Payment RequiredSolde de crédits insuffisant
  • POST /v1/emails alors que le solde de crédits du compte est inférieur à 1.
403ForbiddenAction refusée malgré une authentification valide
  • Domaine d'envoi non vérifié sur POST /v1/emails.
  • Compte suspendu (réputation d'envoi dégradée) — sur toute route authentifiée, API key ou session.
404Not FoundRessource introuvable
  • Domaine, clé API ou email référencé par :id qui n'existe pas — ou qui appartient à un autre compte : Zendou renvoie volontairement la même 404 dans les deux cas, pour ne jamais révéler l'existence de la ressource d'un tiers.
409ConflictLa requête entre en conflit avec l'état actuel des données
  • Nom de domaine déjà enregistré (par vous ou par un autre compte) sur POST /v1/domains.
  • Une demande de recharge est déjà en attente avec la même référence de transaction sur POST /v1/billing/topup-requests.
429Too Many RequestsLimite journalière d'envoi atteinte
  • POST /v1/emails alors que le nombre d'emails envoyés depuis minuit UTC a atteint la limite journalière du compte (200 par défaut, relevée automatiquement avec l'ancienneté et le volume — voir Facturation).

Pour le détail des messages exacts renvoyés par POST /v1/emails, voir le tableau d’erreurs de la page « Envoyer un email ».