Skip to main content

Gestion des erreurs

L’API renvoie des erreurs dans un format JSON cohérent. Le code HTTP indique la catégorie, le corps de la réponse donne le détail.

Format standard

{
  "timestamp": "2026-04-18T14:30:00Z",
  "status": 400,
  "error": "Bad Request",
  "message": "L'email est déjà utilisé",
  "path": "/api/auth/candidate/register"
}

Codes HTTP

CodeSignificationCause typique
200 OKSuccèsRequête réussie
201 CreatedRessource crééeInscription, création d’offre
204 No ContentSuccès sans corpsSuppression, mise à jour silencieuse
400 Bad RequestRequête invalideValidation échouée, données manquantes
401 UnauthorizedNon authentifiéToken absent, expiré ou invalide
403 ForbiddenNon autoriséRôle insuffisant
404 Not FoundRessource introuvableID inexistant
409 ConflictConflitEmail déjà inscrit, doublon
422 Unprocessable EntityRègle métier violéeCandidature déjà envoyée
429 Too Many RequestsRate limit dépasséTrop de tentatives
500 Internal Server ErrorErreur serveurBug ou panne ponctuelle

Erreurs de validation

Pour une erreur de validation (code 400), les détails par champ sont fournis dans fieldErrors :
{
  "timestamp": "2026-04-18T14:30:00Z",
  "status": 400,
  "error": "Validation failed",
  "message": "Un ou plusieurs champs sont invalides",
  "path": "/api/auth/candidate/register",
  "fieldErrors": {
    "email": "Format d'email invalide",
    "password": "Doit contenir au moins 8 caractères",
    "phoneNumber": "Numéro de téléphone camerounais requis"
  }
}

Erreurs métier

MessageHTTPContexte
”Compte recruteur en attente de validation”403Recruteur non validé par l’admin
”Entreprise non vérifiée”403L’entreprise n’est pas encore approuvée
”Offre d’emploi non publiée”404Offre en brouillon ou fermée
”Candidature déjà envoyée”409Le candidat a déjà postulé à cette offre
”CV requis pour postuler”400Profil candidat incomplet
”Limite d’offres actives atteinte”422Quota de publication dépassé

Rate limiting

Les endpoints sensibles (login, register, forgot-password) sont limités par IP via Bucket4j. Un 429 Too Many Requests inclut l’en-tête Retry-After indiquant le délai en secondes avant de réessayer.