Documentation · API REST · JSON

Form'Annonce API

Intégrez Form'Annonce dans vos outils métier. Publiez des annonces, consultez les candidatures et gérez les statuts directement depuis votre système.

API opérationnelle
Version 1.0
HTTPS uniquement
Format JSON
Authentification

Toutes les requêtes nécessitent une clef API dans le header X-API-Key. Deux façons d'en obtenir une : les organismes de formation génèrent la leur directement depuis leur dashboard (onglet Accès API), les éditeurs de logiciels nous contactent pour obtenir une clef partenaire dédiée.

⚠️ Ne partagez jamais votre clef API. Toutes les actions effectuées avec cette clef sont associées à votre compte organisme.
Exemple de requête authentifiée
GET /api/annonces
Host: us-central1-formannonce.cloudfunctions.net
X-API-Key: votre_clef_api
Content-Type: application/json
Codes d'erreur

L'API retourne toujours un objet JSON avec un champ erreur en cas de problème.

200 OK 201 Créé 400 Paramètres invalides 401 Clef manquante 403 Clef invalide 404 Introuvable 500 Erreur serveur
Format d'erreur
{ "erreur": "Clef API invalide ou désactivée." }
Annonces
POST /annonces Créer une annonce de mission

Publie une nouvelle annonce sur Form'Annonce, immédiatement visible pour les formateurs inscrits dans le domaine correspondant.

ℹ️ Cet endpoint est limité en débit (par défaut 30 annonces par heure et par clef). Au-delà, l'API renvoie un code 429.
Paramètres
ChampTypeStatutDescription
titrestringRequisIntitulé de la mission (max 200 car.)
descriptionstringRequisDescription détaillée (max 2000 car.)
domainestringRequisDomaine ex: "Informatique & Numérique"
deptstringOptionnelDépartement ou zone géographique (défaut : "France")
villestringOptionnelVille précise de la mission
modalitestringOptionnelPrésentiel, Distanciel ou Hybride (défaut : Présentiel)
dateDebutstringOptionnelDate de début au format JJ/MM/AAAA. Si absent, affiché "Dès que possible".
dateFinstringOptionnelDate de fin au format JJ/MM/AAAA. Recommandée : déclenche l'archivage automatique de la mission une fois la date passée.
dureestringOptionnelDurée ex: "2 Jours" (défaut : "À négocier")
tarifstringOptionnelBudget indicatif ex: "400/jour" (défaut : "À négocier")
fraisstringOptionnelFrais de déplacement (défaut : "À négocier")
publicCiblestringOptionnelPublic et effectif ex: "5 salariés"
ofNomstringOptionnelNom de l'organisme de formation à afficher sur l'annonce. Si absent, le nom associé à la clef API est utilisé.
formdevActionIdnumberOptionnelID session Formdev pour l'intégration partenaire
Exemple — requête
{
  "titre": "Formateur Excel VBA — Niveau avancé",
  "description": "Intervention de 2 jours en intra-entreprise...",
  "domaine": "Informatique & Numerique",
  "dept": "Gironde (33)",
  "modalite": "Presentiel",
  "dateDebut": "10/05/2026",
  "dateFin": "11/05/2026",
  "duree": "2 Jours",
  "tarif": "400/jour",
  "frais": "Non pris en charge",
  "publicCible": "5 salaries"
}
Exemple — réponse 201
{
  "id": "EGar6UPM02t4hJcBtnMi",
  "titre": "Formateur Excel VBA — Niveau avancé",
  "statut": "ouverte",
  "auteurId": "qWEcRttEeUTcGW4hc1YYZJWpdKt2",
  "dateCreation": "2026-04-24T10:26:29.590Z",
  "source": "api"
}
201 Annonce créée 400 Champs manquants 401 Non authentifié 429 Limite horaire atteinte
GET /annonces Lister vos annonces

Retourne la liste des annonces publiées par votre organisme, triées par date de création décroissante (50 maximum).

Réponse
{
  "total": 2,
  "annonces": [
    {
      "id": "EGar6UPM02t4hJcBtnMi",
      "titre": "Formateur Excel VBA",
      "statut": "ouverte",
      "domaine": "Informatique & Numerique",
      "dept": "Gironde (33)",
      "budget": "400/jour",
      "duree": "2 Jours",
      "source": "api",
      "dateCreation": "2026-04-24T10:26:29.590Z"
    }
  ]
}
200 OK
GET /annonces/{id} Détail d'une annonce

Retourne le détail complet d'une annonce à partir de son identifiant.

200 OK 404 Introuvable
PUT /annonces/{id} Modifier une annonce

Met à jour les champs d'une annonce existante. Seuls les champs envoyés sont modifiés. Le champ statut accepte ouverte ou fermee (archiver l'annonce).

200 OK 404 Introuvable
DELETE /annonces/{id} Supprimer une annonce

Supprime définitivement une annonce. Les candidatures associées ne sont pas supprimées.

⚠️ Cette action est irréversible.
200 Supprimée 404 Introuvable
Candidatures
GET /annonces/{id}/candidatures Lister les candidats

Retourne la liste des candidatures reçues pour une annonce. Les emails des candidats ne sont jamais exposés par l'API.

Réponse
{
  "total": 1,
  "candidatures": [
    {
      "id": "8UpuO1xK8RnoI1m22jc8",
      "annonceId": "EGar6UPM02t4hJcBtnMi",
      "titreAnnonce": "Formateur Excel VBA",
      "candidatId": "qWEcRttEeUTcGW4hc1YYZJWpdKt2",
      "nom": "Joao Fernandes",
      "statut": "En attente",
      "tarif": "400/jour",
      "emailVerifie": true,
      "dateCandidature": "2026-04-24T10:35:00.000Z"
    }
  ]
}
200 OK 404 Annonce introuvable
PUT /annonces/{id}/candidatures/{candidatId} Changer le statut d'une candidature

Met à jour le statut d'une candidature. Un email de notification est automatiquement envoyé au formateur lors d'un passage en Accepté ou Refusé.

ChampTypeStatutValeurs acceptées
statut string Requis Accepté Refusé En attente
Exemple — accepter un candidat
PUT /api/annonces/EGar6UPM02t4hJcBtnMi/candidatures/8UpuO1xK8RnoI1m22jc8

{ "statut": "Accepté" }

// Réponse 200
{
  "id": "8UpuO1xK8RnoI1m22jc8",
  "statut": "Accepté"
}
200 OK 400 Statut invalide 404 Introuvable
Modes d'intégration partenaire

Pour les éditeurs de logiciels métier souhaitant publier des missions Form'Annonce pour le compte de leurs clients OF, trois architectures sont disponibles selon le niveau d'intégration souhaité.

MODE 3 Clef autonome par OF Le plus simple — chaque OF gère sa propre clef

Chaque OF génère sa propre clef API depuis son espace Form'Annonce (dashboard → onglet Accès API) et la renseigne dans son logiciel métier. L'éditeur n'a rien à gérer côté authentification : les annonces sont publiées directement sous le compte de l'OF, avec ses vraies informations. Aucune clef partenaire requise pour l'éditeur.

Extrait — POST /annonces (avec la clef de l'OF)
{
  "titre": "Formateur Sécurité au travail",
  "domaine": "Santé, Sécurité & Environnement",
  "dept": "Haute-Garonne (31)",
  "modalite": "Présentiel"
}
MODE 1 Clef partagée éditeur L'éditeur gère tout avec une seule clef

L'éditeur utilise une seule clef API partenaire. Chaque annonce inclut le champ ofNom pour afficher le nom de l'OF client. Aucun compte à créer pour les clients, tout passe par le compte de l'éditeur.

Extrait — POST /annonces
{
  "titre": "Formateur Sécurité au travail",
  "domaine": "Santé, Sécurité & Environnement",
  "ofNom": "XYZ Formation"
}
MODE 2 Comptes individuels provisionnés Avancé — chaque OF a son propre espace complet

L'éditeur provisionne un compte Form'Annonce pour chaque OF client via l'API admin et publie les missions sous ce compte. L'OF reçoit un lien de connexion lui donnant accès à son espace (dashboard, candidatures). Il peut définir un mot de passe ou lier son compte Google pour se connecter de façon autonome, sans perdre l'historique.

ℹ️ Ce mode nécessite une clef admin dédiée et fait l'objet d'un guide d'intégration privé. Contactez-nous pour le mettre en place.
Intégration Formdev

Le webhook Formdev permet à l'équipe Formdev de publier automatiquement des sessions depuis leur backoffice vers Form'Annonce, avec l'identifiant de session stocké pour la traçabilité.

ℹ️ Cet endpoint est réservé au partenariat Formdev et nécessite la clef API partenaire Formdev dédiée.
POST /webhook/formdev Publier une session Formdev

Reçoit le payload d'une session Formdev et crée l'annonce correspondante sur Form'Annonce. Le champ formdevActionId est stocké sur l'annonce pour permettre l'injection du formateur retenu dans la session lors de l'acceptation d'une candidature (phase 2).

201 Annonce créée 400 Payload invalide