Skip to main content

Candidature

Une candidature (Candidature) est la soumission d’un candidat pour une offre donnée, avec CV et lettre de motivation.

Schéma

Exemple JSON

{
  "id": 9001,
  "offre": { "id": 123, "titre": "Développeur Backend Java (H/F)" },
  "candidat": { "id": 42, "firstName": "Jean", "lastName": "Ngassa" },
  "cv": { "id": 17, "fileName": "cv-jean-ngassa.pdf", "downloadUrl": "/v1/api/files/cv/17" },
  "lettreMotivation": "Madame, Monsieur, je vous présente ma candidature...",
  "status": "IN_PROGRESS",
  "appliedAt": "2026-04-16T14:20:00Z",
  "lastStatusChange": "2026-04-17T09:00:00Z",
  "timeline": [
    { "type": "STATUS_CHANGE", "fromStatus": null, "toStatus": "NEW", "at": "2026-04-16T14:20:00Z" },
    { "type": "STATUS_CHANGE", "fromStatus": "NEW", "toStatus": "TO_MEET", "at": "2026-04-16T16:45:00Z" },
    { "type": "NOTE", "content": "Bon profil, à contacter", "authorId": 42, "at": "2026-04-17T09:00:00Z" },
    { "type": "STATUS_CHANGE", "fromStatus": "TO_MEET", "toStatus": "IN_PROGRESS", "at": "2026-04-17T09:00:00Z" }
  ]
}

Pipeline de statuts

StatutDescriptionCôté candidat
NEWReçue, non traitée”En cours d’examen”
TO_MEETRecruteur intéressé”En cours d’examen”
IN_PROGRESSTraitement actif”En cours d’examen”
INTERVIEWEDEntretien passé”Entretien effectué”
HIREDRetenu”Félicitations, retenu !”
REJECTEDRefusé”Non retenu” (+ motif optionnel)
WITHDRAWNRetiré par candidat”Retirée”

Transitions autorisées

Un rollback 24h est possible après HIRED / REJECTED pour corriger une erreur de clic. Passé ce délai, la décision est verrouillée.

Événements émis

Double-postulation interdite

CREATE UNIQUE INDEX uq_candidature_active
  ON candidatures(offre_id, candidat_id)
  WHERE status NOT IN ('REJECTED', 'WITHDRAWN');

Endpoints principaux

MéthodePathRôle
POST/v1/api/offres/{id}/applyCandidat postule
GET/v1/api/candidats/me/candidaturesHistorique candidat
GET/v1/api/recruteur/candidaturesFile recruteur
PATCH/v1/api/recruteur/candidatures/{id}Changer statut
POST/v1/api/candidats/me/candidatures/{id}/withdrawRetirer
GET/v1/api/admin/candidatures/{id}Admin

Suppression / anonymisation

Une candidature ne peut pas être supprimée — elle peut être anonymisée en cas de droit à l’effacement du candidat. candidatId devient NULL, les notes recruteur sont conservées pour les stats.