Erreurs & limites

Format unifié des erreurs et règles d'enforcement des plans SaaSes.

Format unifié

Toutes les erreurs suivent la même enveloppe JSON :

{
  "error": "SNAKE_CASE_ERROR_CODE",
  "message": "Description lisible",
  "details": { /* contexte additionnel, optionnel */ }
}

Codes HTTP utilisés

CodeSignification
200Succès
201Ressource créée
202Accepté (asynchrone — par exemple forgot-password)
204Succès, pas de corps
400Requête invalide — champs manquants ou transition d’état illégale
401Authentification absente ou invalide
402Limite de plan dépassée — upgrade requis
403Authentifié mais pas autorisé (rôle insuffisant, tenant suspendu)
404Ressource non trouvée
409Conflit — slug déjà pris, tenant déjà abonné, etc.
422Validation sémantique échouée (par ex. routingConfig mal formé)
429Quota d’appels API mensuel épuisé
500Erreur serveur interne

Validation (422)

{
  "error": "VALIDATION_FAILED",
  "message": "Request validation failed",
  "details": {
    "fields": [
      { "field": "email", "message": "must be a valid email address" },
      { "field": "slug",  "message": "must match pattern ^[a-z0-9-]{3,50}$" }
    ]
  }
}

Le tableau details.fieldscontient les erreurs par champ. L'UI les affiche directement sous chaque input concerné.

Limites de plan (402)

SaaSes vérifie de façon synchrone les limites de votre plan SaaSes avant chaque opération de création :

{
  "error": "PLAN_LIMIT_EXCEEDED",
  "limit": "maxApplications",
  "current": 1,
  "max": 1,
  "upgradeTo": "Starter"
}

Limites vérifiées : maxApplications, maxManagedTenants, maxMembers, apiCallsPerMonth.

Quota d'appels API mensuel

Reset le 1er du mois UTC

À 80% du quota, un avertissement est émis (visible dans le tableau de bord et envoyé par email si activé). À 100%, l'API de résolution renvoie 429 jusqu'au prochain reset ou jusqu'à un upgrade de plan.

Tout est audité

Chaque mutation est tracée dans le journal d'audit immuable. Vous y trouverez l'auteur (email ou systempour les jobs planifiés), l'entité concernée, les champs before et after, et la raison fournie.