Aller au contenu

API d’intégration

La même source de vérité que l’application : salariés, pointage, congés, bulletins déjà émis. Une clé par dossier, un rôle, pas de secret dans le navigateur.

Authentification

En-tête Authorization: Bearer jh_live_…. La clé se crée dans le dossier (administrateur) et n’est affichée qu’une fois. JURHUMA conserve un hash, jamais le secret.

Le rôle de la clé est celui d’un membre : Administrateur, RH, Pointeuse, Lecture seule. Arrivées, départs, horaires, absences. Jamais les salaires ni les congés payés.

Exemple

curl -sS https://jurhuma.mg/api/v1/me \
  -H "Authorization: Bearer jh_live_…"

curl -sS https://jurhuma.mg/api/v1/employees?active=1 \
  -H "Authorization: Bearer jh_live_…"

curl -sS -X PUT https://jurhuma.mg/api/v1/attendance \
  -H "Authorization: Bearer jh_live_…" \
  -H "Content-Type: application/json" \
  -d '{"employeeId":"…","date":"2026-09-16","arrival":"08:00","departure":"17:00"}'

Ressources

  • GET/api/v1Découverte de l’API
  • GET/api/v1/openapi.jsonSchéma OpenAPI
  • GET/api/v1/meIdentité de la clé
  • GET/api/v1/companyFiche entreprise
  • GET/api/v1/employeesListe des salariés
  • POST/api/v1/employeesCréer un salarié
  • GET/api/v1/employees/:idFiche salarié
  • PATCH/api/v1/employees/:idModifier un salarié
  • GET/api/v1/attendancePointage
  • PUT/api/v1/attendanceSaisir un jour
  • GET/api/v1/employees/:id/attendancePointage d’un salarié
  • GET/api/v1/payslipsBulletins émis
  • GET/api/v1/payslips/:idUn bulletin émis
  • GET/api/v1/leaveCongés posés
  • POST/api/v1/leavePoser un congé

Catalogue machine : /api/v1 · OpenAPI. 2 lecture de bulletins — uniquement les documents déjà émis, jamais un recalcul.

Sécurité

Audit interne de l’API partenaire : jeton Bearer, pas de cookie de session, rôles du dossier, plafond de corps, journal d’accès. Les contrôles ci-dessous sont ceux du serveur, pas une checklist marketing.

  • Authentification par jeton, pas par cookieen place

    Authorization: Bearer jh_live_… ou X-Api-Key. Le cookie de session du compte n’ouvre pas l’API. Le secret n’est stocké qu’en SHA-256.

  • Comparaison en temps constanten place

    Le hash du jeton est comparé octet par octet (XOR) sur toute la liste des préfixes, y compris en cas d’absence, pour ne pas fonder un oracle de timing.

  • Mêmes rôles que le dossieren place

    Planning et lecture ne reçoivent ni salaires, ni bulletins, ni identifiants d’entreprise. Un mois déjà payé ne se réécrit pas.

  • Limitation de débiten place

    180 requêtes / minute par adresse, 120 / minute par clé. Au-delà : HTTP 429.

  • Plafond de corpsen place

    JSON limité à 65536 octets. Un corps plus gros est rejeté avant parsing.

  • CORS sans credentialsen place

    Origine * uniquement parce que l’API n’utilise pas le cookie de session. Pas de Access-Control-Allow-Credentials.

  • Essai et licenceen place

    Le dossier spécimen n’émet pas de clé. Une licence suspendue reste en lecture seule.

  • Journal d’accèsen place

    Chaque appel authentifié est horodaté (clé, chemin, statut, IP). Conservation 12 mois.

  • En-têtes de réponseen place

    nosniff, DENY (frame), no-store, referrer no-referrer. Pas de cache d’une fiche salarié.

  • Erreurs internes opaquesen place

    Un incident serveur renvoie { error: { code: "internal" } }, jamais la pile ni le message d’exception.

Limites

  • Dossier d’essai (spécimen) : pas de clé. Abonnement requis.
  • Essai payant 14 jours : cinq salariés, un mois de paie émis, documents marqués ESSAI.
  • Un rôle planning ne reçoit jamais les salaires ni les bulletins.
  • Un mois déjà payé ne se réécrit pas, y compris par l’API.
  • Les identifiants d’entreprise (NIF, CNaPS…) ne sortent que pour une clé RH ou administrateur.