Aller au contenu

Tout passe par l'API. Donc tout se branche.

Votre logiciel s'ouvre sur vos autres outils. Votre CRM, votre compta, votre LMS, vos automatisations, vos assistants IA : un outil qui sait appeler une API ou recevoir un webhook se branche sur votre espace. Voici les routes, les permissions et les exemples.

Une seule logique, cinq portes.

L'API REST sert les logiciels. Le serveur MCP sert les assistants IA. Les deux appellent les mêmes fonctions, avec la même clé et les mêmes permissions. Les webhooks et le connecteur HubSpot, eux, font parler votre espace de lui-même, à chaque événement.

  • 600 requêtes par minute et par clé ; pagination de 200 éléments au plus.
  • Une clé appartient à un seul organisme : elle est refusée à l'adresse d'un autre.
  • Une panne d'un service externe ne bloque jamais une action dans votre espace.
  • Votre espace envoie
  • Vos outils interrogent

1. Vous créez une clé.

Dans l'administration, écran Intégrations, « Nouvelle clé » : le nom de l'outil, ses permissions, sa durée de validité. Le secret s'affiche une seule fois. Vous révoquez la clé au même endroit, avec effet immédiat.

  • Seule l'empreinte de la clé est conservée : une fuite de la base ne donne aucune clé utilisable.
  • La clé agit au nom de l'administrateur qui l'a créée, et s'éteint avec son compte.
  • Création et révocation sont journalisées.
# La clé se passe dans l'en-tête Authorization
curl -s https://votre-espace/api/v1/moi \
  -H "Authorization: Bearer $CLE"

# Les clés commencent par s4mk_ : les détecteurs
# de secrets les reconnaissent.

2. Vous choisissez ce qu'elle ouvre.

Sept permissions, appelées portées. Une clé ne voit que ce que vous avez coché : la lecture des dossiers, qui contient des noms d'apprenants, n'est jamais cochée par défaut.

  • organisme:lecture

    Identité publique : raison sociale, SIRET, numéro de déclaration d'activité, certificat Qualiopi, référent handicap.

  • catalogue:lecture

    Formations, certifications RS et RNCP.

  • sessions:lecture

    Sessions disponibles à la vente : seulement le vendable, sans réservation ni nom d'apprenant.

    Cochée par défaut
  • qualite:lecture

    Indicateurs de résultats, BPF, pilotage : des chiffres agrégés.

  • dossiers:lecture

    Dossiers : statut, étape, avancement, pièces manquantes, noms des apprenants.

    Jamais cochée par défaut
  • leads:ecriture

    Déposer une demande de contact dans la boîte de réception.

    Écriture
  • editorial:lecture

    Calendrier éditorial des réseaux sociaux.

    Non cochée par défaut

3. API REST v1 : 14 routes.

13 en lecture, 1 en écriture. La documentation lisible de chaque route est sur la page Documentation de l'API ; la description complète, au format OpenAPI 3.1, est publiée à l'adresse /api/v1/openapi.json de votre espace : Make, Zapier, n8n et Postman l'importent telle quelle.

Routes de l'API REST v1
MéthodeCheminPortéeCe que vous obtenez
GET/api/v1/organismeorganisme:lectureIdentité publique de l'organisme
GET/api/v1/formationscatalogue:lectureCatalogue des formations
GET/api/v1/sessionssessions:lectureSessions disponibles à la vente
GET/api/v1/organisme/identiteorganisme:lectureDesign system de l'organisme
GET/api/v1/organisme/dossier-documentaireorganisme:lectureDossier documentaire de l'organisme
GET/api/v1/certificationscatalogue:lectureCertifications RS / RNCP de l'organisme
GET/api/v1/dossiersdossiers:lectureDossiers de formation
GET/api/v1/dossiers/{id}dossiers:lectureUn dossier
GET/api/v1/indicateursqualite:lectureIndicateurs de résultats
GET/api/v1/bpfqualite:lectureBilan pédagogique et financier calculé
GET/api/v1/pilotagequalite:lecturePilotage
GET/api/v1/editorial/calendriereditorial:lectureCalendrier éditorial des réseaux sociaux
POST/api/v1/leadsleads:ecritureDéposer une demande de contact dans la boîte de réception de l'organisme
GET/api/v1/moitoute cléLa clé utilisée
# Lire cinq dossiers
curl -s "https://votre-espace/api/v1/dossiers?limite=5" \
  -H "Authorization: Bearer $CLE"
# Déposer un prospect venu de votre CRM
curl -s -X POST https://votre-espace/api/v1/leads \
  -H "Authorization: Bearer $CLE" \
  -H "content-type: application/json" \
  -d '{"prenom":"Paul","nom":"Durand",
       "email":"paul@exemple.fr",
       "objectif":"Formation Excel",
       "source":"HubSpot"}'

Quand ça échoue

Les erreurs reviennent en JSON, avec un message en français et un code stable : 401, 403, 404, 400 ou 429. Un 429 porte l'en-tête Retry-After.

{
  "erreur": "message en français",
  "code": "non_authentifie | interdit | introuvable | invalide | trop_de_requetes"
}

4. Serveur MCP : votre assistant IA lit vos vraies données.

Un assistant compatible MCP (Claude Desktop, Claude Code, Cursor et d'autres) se branche à l'adresse /mcp de votre espace, avec la même clé. Il n'annonce que les outils permis par cette clé.

Des demandes que vous pouvez lui faire : « Quels dossiers sont bloqués et pourquoi ? », « Résume le BPF 2026 », « Quel est notre taux de satisfaction publié ? », « Enregistre ce prospect rencontré au salon ».

  • Transport Streamable HTTP, sans état, version 2025-11-25 du protocole.
  • L'en-tête Origin est vérifié.
  • L'authentification OAuth, pour publier le serveur comme connecteur public, est prévue pour une version suivante.
{
  "mcpServers": {
    "quali4mation": {
      "type": "http",
      "url": "https://votre-espace/mcp",
      "headers": { "Authorization": "Bearer s4mk_…" }
    }
  }
}

Outils en lecture seule

  • organisme_lire
  • identite_organisme
  • dossier_documentaire
  • formations_lister
  • certifications_lister
  • sessions_disponibles
  • dossiers_lister
  • dossier_lire
  • indicateurs_lire
  • bpf_lire
  • pilotage_lire
  • editorial_calendrier

Outil en écriture, qui n'envoie aucun e-mail

  • lead_creer

5. Webhooks signés : votre espace prévient vos outils.

Vous donnez une adresse https et vous choisissez les événements. Chaque envoi est un POST JSON signé, au format Standard Webhooks. Le secret de signature s'affiche une seule fois.

Événements envoyés par webhook
ÉvénementQuand
dossier.creeCréation d'un dossier
dossier.etape_changeeToute transition du pipeline
dossier.valideValidation par l'organisme
piece.signeeSignature en ligne d'une pièce
financement.accordeAccord de financement enregistré
financement.refuseRefus de financement enregistré
message.recuMessage de la boîte de réception (site vitrine, API)
En-têtes de chaque envoi
En-têteContenu
webhook-idIdentifiant de l'événement, identique à chaque tentative : dédoublonnez dessus.
webhook-timestampHorodatage Unix, en secondes, de la tentative.
webhook-signaturev1,<base64> : HMAC-SHA256 de {webhook-id}.{webhook-timestamp}.{corps brut}.
x-s4m-evenementType de l'événement.
{
  "id": "evt_3f1c…",
  "type": "dossier.etape_changee",
  "version": "2026-11-13",
  "cree_le": "2026-11-13T09:12:44.120Z",
  "organisme": { "id": "of-…" },
  "test": false,
  "donnees": {
    "dossier": { "id": "…", "reference": "ADF-2026-0042",
                 "etape": "B", "sous_statut": "dossier_valide" },
    "de":   { "etape": "A", "sous_statut": "en_cours_validation" },
    "vers": { "etape": "B", "sous_statut": "dossier_valide" },
    "action": "valider_dossier"
  }
}

Référence fictive. Aucune coordonnée d'apprenant n'entre dans un événement.

Vérifier la signature, côté destinataire

Recalculez la signature sur le corps brut, comparez à temps constant, refusez un horodatage de plus de cinq minutes, ignorez un identifiant déjà traité. Les bibliothèques Standard Webhooks le font en une ligne ; voici l'équivalent en Node, sans dépendance.

  • Réponse 2xx dans les 10 secondes : reçu. Sinon, nouvelle tentative, cinq au total.
  • Réponse 410 : arrêt immédiat. Quinze échecs de suite : désactivation automatique.
  • Adresses internes et privées refusées ; aucune redirection suivie.
  • Un bouton envoie un événement de test, avec des données fictives.
import { createHmac, timingSafeEqual } from "node:crypto";
function verifier(secret, entetes, corpsBrut) {
  const id = entetes["webhook-id"],
        ts = Number(entetes["webhook-timestamp"]);
  if (Math.abs(Date.now() / 1000 - ts) > 300) return false; // rejeu
  const cle = Buffer.from(secret.replace(/^whsec_/, ""), "base64");
  const attendu = Buffer.from(`v1,${createHmac("sha256", cle)
    .update(`${id}.${ts}.${corpsBrut}`).digest("base64")}`);
  return entetes["webhook-signature"].split(" ").some((s) =>
    s.length === attendu.length &&
    timingSafeEqual(Buffer.from(s), attendu));
}

Branchez votre CRM, votre compta, votre LMS.

Ce qui est prêt à l'emploi, ce qui passe par une automatisation, et ce qui demande un peu de développement.

Votre CRM

Connecteur HubSpot : à la création d'un dossier, l'entreprise, le contact du représentant et la transaction sont retrouvés ou créés. À chaque étape, la transaction avance. Les données des apprenants ne partent jamais.

Prêt à l'emploi : HubSpot

Un autre CRM se branche par les webhooks et par POST /api/v1/leads.

Votre compta, vos tableurs

Le BPF, le pilotage et les dossiers se lisent par l'API. Un webhook sur dossier.etape_changee peut ajouter une ligne dans un tableur de suivi des facturations.

Par l'API ou une automatisation

Il n'existe pas de connecteur comptable prêt à l'emploi.

Votre LMS, votre site

Catalogue, certifications et sessions à vendre se lisent par l'API ; le chatbot s'installe sur votre site avec une ligne de code. La création de dossiers par l'API est à venir.

Par l'API

Quali4mation n'héberge pas de modules SCORM : votre LMS reste votre LMS.

L'écran Intégrations, capturé dans un espace d'essai. Dans l'essai, HubSpot est connecté en simulation : vous voyez les appels qui partiraient, sans compte HubSpot.

Un exemple complet : prévenir l'équipe quand un financement est accordé.

Un scénario Make, de bout en bout. Zapier et n8n se branchent de la même façon.

  1. Make écoute

    Un module « Custom webhook » vous donne une adresse https.

  2. Votre espace s'abonne

    Intégrations, « Nouveau webhook » : cette adresse, les événements financement.accorde et dossier.etape_changee.

  3. Vous testez

    « Envoyer un événement de test » : Make apprend la structure, sur des données fictives.

  4. Make agit

    Un message à l'équipe à chaque accord ; une ligne dans un tableur à chaque fin de formation.

Votre solution peut évoluer.

Un logiciel standard ne colle jamais à 100 % à un organisme. Le vôtre peut recevoir ses spécificités, sans que votre espace devienne un cas à part que plus personne ne sait mettre à jour.

  • Un dépôt de code pour vous

    Chaque client dispose de son propre dépôt de code : vos évolutions y vivent, et le lien de votre code vous est transmis.

  • Des demandes suivies par ticket

    Chaque demande d'évolution est suivie par ticket : vous décrivez ce que vous voulez changer, et la demande est tracée.

  • Un quota de spécificités

    Un quota de spécificités est prévu selon votre formule ; il est précisé dans votre devis. Au-delà, nous en parlons ensemble. Aucun délai n'est annoncé avant un devis.

Vous voulez savoir ce qu'une évolution recouvre dans votre cas ? Prendre rendez-vous (ouvre la prise de rendez-vous dans un nouvel onglet)

Questions sur l'API

L'API est-elle une option payante ?

Non. L'API REST, le serveur MCP, les webhooks et le connecteur HubSpot sont compris dans l'abonnement.

Que peut écrire l'API aujourd'hui ?

Une seule chose : déposer une demande de contact (un prospect) dans votre boîte de réception. Tout le reste est en lecture. La création de dossiers, d'apprenants et le dépôt de pièces par l'API sont prévus pour une version suivante.

Mon logiciel de comptabilité ou mon LMS a-t-il un connecteur prêt à l'emploi ?

Le seul connecteur prêt à l'emploi est HubSpot. Pour les autres outils, le branchement passe par l'API REST (que tout outil ou automatisation sachant appeler une API peut lire) ou par les webhooks, que Make, Zapier et n8n savent recevoir. Il faut donc un scénario d'automatisation ou un peu de développement.

Un assistant IA peut-il modifier mes dossiers ?

Non. Les outils MCP sont en lecture seule, à l'exception de la création d'un prospect, qui n'envoie aucun e-mail. Et l'assistant ne voit que les outils permis par la clé que vous lui donnez.

Les webhooks contiennent-ils des données d'apprenants ?

Non. Aucune coordonnée (nom, prénom, e-mail, téléphone, adresse) n'entre dans un événement. Un outil qui a besoin de plus lit l'API avec une clé et une permission explicite.

Que se passe-t-il si mon outil est en panne ?

Votre travail n'est jamais bloqué : les envois partent en arrière-plan. Un envoi en échec est réessayé, cinq tentatives au total, puis abandonné et signalé dans l'écran Intégrations.

Créez une clé, envoyez un événement de test.

Dans votre espace d'essai, l'écran Intégrations est ouvert : clé d'API, webhook de test, HubSpot en simulation. Vous voyez ce qui part, et ce qui ne part jamais.

Essayer gratuitement