Comptes de services & Webhooks

Connecter Neil à des systèmes externes : accès API entrant et notifications sortantes

Neil la chouette

Neil n’est pas un système isolé. Il peut recevoir des requêtes d’outils externes (CRM, BI, comptabilité) et envoyer des notifications quand un événement se produit (inscription, note publiée, absence saisie, etc.).

Deux mécanismes complémentaires rendent cela possible : le Compte de Service (accès entrant) et le Webhook (notification sortante).

Système externe
Système A
Clé API
NEIL
API REST
Webhook
Système externe
Système B
Comptes de service — accès entrant

Un compte de service permet à un système tiers (CRM, outil comptable, BI) d'accéder aux données de Neil de manière contrôlée. Chaque compte est isolé et dispose de ses propres droits.

Périmètre d'accès (scope)

Le compte n'accède qu'aux données autorisées : écoles, niveaux, années scolaires, matières. Le principe du moindre privilège s'applique : on ne donne accès qu'au strict nécessaire.

Authentification sécurisée

Chaque compte génère une clé API unique, affichée une seule fois à la création. La clé peut avoir une date d'expiration et une période d'autorisation définie.

Permissions granulaires

Arbre de droits détaillé par section : lecture seule, écriture, ou les deux. Chaque compte a un profil de permissions indépendant des utilisateurs humains.

Isolation des comptes

Chaque compte de service est indépendant. Révoquer un compte ne coupe que l'accès du système concerné, sans impacter les autres intégrations.

Un compte de service = un système externe. On ne partage jamais une clé entre plusieurs outils. Si un prestataire change ou si un outil est décommissionné, on révoque le compte sans impacter les autres intégrations.

Techniquement : l'authentification se fait via l'en-tête HTTP X-Lucius-Api-Key sur chaque appel à l'API REST de Neil.

Exemple — récupérer une facture
GET /api/accounting/invoices/1234
X-Lucius-Api-Key: sk_live_abc123...def456
Réponse (200)
{
  "id": 1234,
  "number": "FA-2025-0042",
  "invoice_type": "invoice",
  "amount": 450000,
  "student": {
    "first_name": "Jean",
    "last_name": "Dupont"
  },
  "school": { "name": "École A" },
  "created_at": "2025-09-15T10:30:00Z"
}

Le système externe envoie sa clé API dans l'en-tête de chaque requête. Neil vérifie le scope et les permissions du compte, puis retourne les données autorisées. La documentation complète de l'API est accessible via le Swagger intégré.

Explication

Un compte de service est l’identité d’un système tiers (CRM, outil comptable, BI) qui vient lire ou écrire dans Neil. Chaque compte porte sa propre clé API, son périmètre (écoles, niveaux, années) et ses permissions, en suivant le principe du moindre privilège. Un compte par système, jamais de clé partagée : ainsi, révoquer un compte ne coupe que l’outil concerné sans impacter les autres intégrations.

Webhooks — notifications sortantes

Un webhook est une notification automatique envoyée par Neil vers un système tiers dès qu'un événement se produit. C'est du temps réel, pas de la synchronisation batch.

Temps réel

Le webhook se déclenche à l'instant où l'événement se produit dans Neil. Pas d'attente, pas de batch nocturne.

403 événements

Neil expose 403 événements couvrant 6 domaines (configuration, pédagogie, scolarité, marketing, RH, comptabilité). Chaque webhook sélectionne les événements pertinents.

Unidirectionnel

Neil notifie, le système destinataire reçoit et traite. Chaque webhook pointe vers une URL configurée avec des en-têtes personnalisés.

En-têtes personnalisées (headers). Chaque webhook peut embarquer des en-têtes HTTP clé/valeur envoyées avec chaque notification. Cela permet au système destinataire d'authentifier l'appel (token, clé secrète) ou de router la requête.
Exemple d'en-têtes configurées
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-Source: neil-erp
X-School-Id: 1
Explication

Les webhooks permettent d'alimenter en temps réel un CRM, un outil BI ou un système de notification interne. Un webhook inactif (URL en erreur) échoue silencieusement — prévoir un monitoring côté système destinataire.

Exemple — webhook déclenché par une inscription
POST https://crm.ecole.fr/webhook/neil
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...  ← en-tête personnalisée
X-Source: neil-erp  ← en-tête personnalisée
Payload envoyé par Neil
{
  "event": "student_formula.created",
  "timestamp": "2025-09-15T14:22:31Z",
  "data": {
    "student_id": 5678,
    "formula_id": 42,
    "school_id": 1,
    "year": 2025
  }
}
Explication

Dès qu'un étudiant est inscrit à une formule dans Neil, le webhook envoie un payload JSON vers l'URL configurée. Le système destinataire (CRM, BI, etc.) reçoit l'événement et peut déclencher ses propres traitements.

Domaines d'événements disponibles

Chaque Webhook écoute un ou plusieurs événements. Neil expose 403 événements répartis en 6 domaines :

Configuration
90 événements
Écoles, niveaux, profils, tags…
Pédagogie
123 événements
Formations, modules, notes, séances…
Scolarité
89 événements
Étudiants, absences, inscriptions…
Marketing
37 événements
Formules, réductions, documents…
RH
34 événements
Employés, contrats, profils…
Comptabilité
30 événements
Factures, paiements, remises…
Explication

Neil expose 403 événements webhook organisés en 6 domaines fonctionnels. Cette finesse permet d'écouter précisément ce qui intéresse le système destinataire, sans être noyé par les notifications inutiles.

Les domaines reflètent les grandes zones métier : Configuration (écoles, niveaux, profils), Pédagogie (formations, modules, notes), Scolarité (inscriptions, étudiants), Comptabilité (factures, paiements). Chaque événement correspond à un changement d'état précis (création, modification, suppression d'un objet).

Un webhook peut être abonné à un seul événement (notifier le CRM à chaque inscription), à plusieurs événements d'un domaine (suivre tous les changements en pédagogie), ou à un domaine entier. La granularité permet d'industrialiser des intégrations ciblées sans surcharger les systèmes externes.

Agir au nom d'un étudiant

Un système tiers peut avoir besoin d'afficher à un étudiant ses propres données — son planning, ses notes, ses documents — depuis sa propre interface. Plutôt que de lui donner un accès global, Neil lui permet de demander un jeton de courte durée qui l'authentifie comme cet étudiant, sans session ni cookie.

Le compte de service demande ce jeton pour un étudiant précis, puis s'en sert pour interroger l'espace étudiant. Il n'obtient que ce que cet étudiant verrait lui-même. Le jeton conserve la trace du compte de service qui l'a demandé : on sait toujours qui a agi, et pour le compte de qui.

Trois conditions. Le compte de service doit être actif, porter une clé API valide, et détenir le droit « Afficher un étudiant » avec un périmètre qui couvre l'école de l'étudiant visé. Sans l'un des trois, la demande est refusée. Le jeton obtenu expire en une minute : il sert à ouvrir la session, pas à être conservé.
Point clé — Le Compte de Service contrôle qui peut accéder à Neil et avec quels droits. Le Webhook contrôle ce que Neil communique vers l’extérieur. Les deux sont indépendants : un système peut avoir un Compte de Service sans Webhook, et inversement.
Points de vigilance
1

La clé API ne s’affiche qu’une fois

À la création d’une clé, Neil l’affiche une seule fois. Si elle est perdue, il faut en générer une nouvelle et mettre à jour le système externe.

2

Surveiller les dates d’expiration

Chaque clé API peut avoir une date d’expiration. Une clé expirée coupe silencieusement l’accès du système externe — anticiper le renouvellement.

3

Un Webhook inactif échoue silencieusement

Si l’URL de destination ne répond plus, Neil continue d’envoyer sans alerte visible. Vérifier régulièrement les événements du Webhook pour détecter les échecs.

01

Un Compte = un système

Ne jamais partager une clé API entre plusieurs outils. Chaque système externe doit avoir son propre Compte de Service avec un scope et des permissions dédiés.

02

Webhook = temps réel

Un Webhook se déclenche quand l’événement se produit, pas selon un planning. Ce n’est pas un outil de synchronisation périodique ou de reprise d’historique.

03

Scope minimal, droits minimaux

Limiter chaque Compte de Service aux seuls écoles, niveaux et permissions strictement nécessaires. Plus le scope est large, plus le risque en cas de fuite de clé est élevé.

Neil

Logiciel de pilotage intelligent dédié à l'enseignement supérieur.