Aller au contenu principal
EntrepriseDocumentation API

Documentation API SKILL LMS

Connectez vos outils aux données de votre organisme.

Lisez vos formations, apprenants, inscriptions et progression avec une API OAuth en lecture seule, incluse à partir du forfait Orga. Retrouvez vos identifiants et la documentation directement dans votre espace.

Base URL

https://mcp.skill-lms.fr/api/v1

Autorisez la connexion OAuth avec PKCE et le scope read, puis utilisez le jeton dédié obtenu. Aucun accès à un autre organisme ni aucune écriture.

Exemple après autorisation OAuth
curl https://mcp.skill-lms.fr/api/v1/learners \
  -H "Authorization: Bearer <read_api_access_token>" \
  -H "Accept: application/json"

API de lecture — incluse à partir du forfait Orga

Créez votre accès dans Paramètres → Intégrations → API REST : Client ID, secret serveur affiché une seule fois, renouvellement et révocation. Un responsable autorise la connexion OAuth avec PKCE (S256), un état aléatoire vérifié au retour et le scope read.

Base : https://mcp.skill-lms.fr/api/v1.
Autorisation : https://mcp.skill-lms.fr/oauth/read-api/authorize.
Jetons et renouvellement : https://mcp.skill-lms.fr/oauth/read-api/token.

Les lectures disponibles sont /organization, /courses,/learners et /enrollments (progression incluse). Pagination : limit de 1 à 100, offset de 0 à 100 000 ; les réponses utilisent data et meta. L’organisme est déterminé par le compte qui autorise la connexion. Le jeton dédié ne permet aucune écriture et ne fonctionne que sur cette API.

Ouvrir le contrat OpenAPI de l’API de lecture

Le cadrage Enterprise ci-dessous décrit des extensions à convenir avec notre équipe. Le contrat OpenAPI ci-dessus est la référence pour les endpoints livrés.

Connecter votre application à l’API disponible

Pour un site web ou une SPA, effectuez les échanges de jetons et les lectures depuis votre backend sécurisé. Cette API ne fournit pas d’autorisation CORS pour des appels directs depuis un navigateur. Le mode client public est réservé aux applications mobiles ou natives avec PKCE, sans secret embarqué.

Préparez un vérificateur PKCE aléatoire de 43 à 128 caractères, son challenge S256 en base64url sans remplissage, et un état aléatoire. Ouvrez l’URL d’autorisation ci-dessous dans le navigateur du responsable. Au retour sur votre callback, vérifiez l’état reçu avant d’échanger le code depuis votre serveur ou, pour un client public mobile ou natif, depuis votre application.

1. Ouvrir la demande d’autorisation
https://mcp.skill-lms.fr/oauth/read-api/authorize?response_type=code&client_id=<client_id>&redirect_uri=<callback_encodee>&scope=read&state=<etat_aleatoire>&code_challenge=<challenge_s256>&code_challenge_method=S256
2. Échanger le code depuis votre backend (client confidentiel)
curl --request POST https://mcp.skill-lms.fr/oauth/read-api/token \
  --user "$CLIENT_ID:$CLIENT_SECRET" \
  --data-urlencode "grant_type=authorization_code" \
  --data-urlencode "code=$CODE" \
  --data-urlencode "redirect_uri=$CALLBACK_URL" \
  --data-urlencode "code_verifier=$PKCE_VERIFIER"
2 bis. Échanger le code dans une application mobile ou native (client public)
curl --request POST https://mcp.skill-lms.fr/oauth/read-api/token \
  --data-urlencode "client_id=$CLIENT_ID" \
  --data-urlencode "grant_type=authorization_code" \
  --data-urlencode "code=$CODE" \
  --data-urlencode "redirect_uri=$CALLBACK_URL" \
  --data-urlencode "code_verifier=$PKCE_VERIFIER"

Conservez les jetons côté serveur pour un client confidentiel, ou dans le stockage sécurisé du système pour une application mobile ou native. Un client public transmet son client_id dans le corps de la requête, sans secret ni HTTP Basic. Le seul scope est read. Envoyez access_token comme Bearer sur les quatre endpoints documentés dans le contrat OpenAPI ; /enrollments inclut la progression. Les listes utilisent limit et offset, avec une réponse data et meta. Aucun identifiant d’organisme ne peut remplacer le périmètre du compte connecté.

3. Renouveler les jetons depuis votre backend
curl --request POST https://mcp.skill-lms.fr/oauth/read-api/token \
  --user "$CLIENT_ID:$CLIENT_SECRET" \
  --data-urlencode "grant_type=refresh_token" \
  --data-urlencode "refresh_token=$REFRESH_TOKEN"
3 bis. Renouveler dans une application mobile ou native (client public)
curl --request POST https://mcp.skill-lms.fr/oauth/read-api/token \
  --data-urlencode "client_id=$CLIENT_ID" \
  --data-urlencode "grant_type=refresh_token" \
  --data-urlencode "refresh_token=$REFRESH_TOKEN"

Après chaque renouvellement réussi, remplacez les deux jetons conservés : les anciens ne sont plus valides. Renouvelez avant l’expiration de l’access_token, indiquée en secondes par expires_in dans chaque réponse de jetons. Séparément, l’autorisation expire après 30 jours sans renouvellement ; une nouvelle autorisation est alors nécessaire. Renouveler le secret client ou révoquer l’intégration depuis les paramètres coupe immédiatement les connexions existantes. Une nouvelle autorisation est alors nécessaire.

Extensions Enterprise à cadrer — hors API de lecture disponible

Les propositions ci-dessous ne constituent pas le contrat de l’API disponible. Utilisez le guide OAuth et le contrat OpenAPI ci-dessus pour votre intégration actuelle.

Vue generale

Une API v1 volontairement stable et lecture seule.

L API Enterprise v1 est pensee pour alimenter un reporting SI, un data warehouse, un CRM ou un tableau de bord franchise, sans donner d acces brut a la plateforme.

Filtrage organisation

Chaque cle API est rattachee a une seule organisation.

JSON stable

Reponses previsibles, pagination obligatoire et erreurs standardisees.

Activation encadree

Scopes, rate limits et webhooks sont valides pendant l onboarding.

Authentification

Cle API organisation cote serveur uniquement.

Les appels utilisent un jeton bearer transmis depuis un backend client. La cle ne doit jamais etre exposee dans un navigateur, une app mobile publique ou un depot Git.

Headers requis
Authorization: Bearer <enterprise_api_key>
Accept: application/json

Scopes v1

read:organizationread:learnersread:coursesread:enrollmentsread:progressread:certificates
Requete indicative apres activation
GET /api/enterprise/v1/learners?limit=50&cursor=eyJwYWdlIjoyfQ
Reponse
{
  "data": [],
  "pagination": {
    "limit": 50,
    "next_cursor": null,
    "has_more": false
  }
}

`limit` vaut 50 par defaut et ne depasse pas 100 en v1.

Endpoints

Extensions Enterprise proposées pour le reporting.

Les exemples ci-dessous sont des propositions à cadrer avec votre DSI ; consultez le contrat OpenAPI de lecture pour les endpoints actuellement livrés. Les écritures restent hors périmètre.

GET/health

Verifier que l API Enterprise repond.

public
Exemple de reponse
{
  "status": "ok",
  "version": "1.0.0"
}
GET/organization

Lire les informations de l organisation associee a la cle API.

read:organization
Exemple de reponse
{
  "data": {
    "id": "org_01J...",
    "name": "Groupe Exemple",
    "plan": "enterprise"
  }
}
GET/learners

Lister les apprenants rattaches a l organisation.

read:learners
Exemple de reponse
{
  "data": [
    {
      "id": "usr_01J...",
      "email": "[email protected]",
      "first_name": "Manon",
      "last_name": "Martin",
      "status": "active"
    }
  ],
  "pagination": { "limit": 50, "next_cursor": null, "has_more": false }
}
GET/courses

Lister les formations visibles dans le perimetre organisationnel.

read:courses
Exemple de reponse
{
  "data": [
    {
      "id": "crs_01J...",
      "title": "Onboarding reseau",
      "status": "published",
      "updated_at": "2026-06-09T10:00:00Z"
    }
  ],
  "pagination": { "limit": 50, "next_cursor": null, "has_more": false }
}
GET/enrollments

Lister les inscriptions, filtrables par apprenant ou formation.

read:enrollments
Exemple de reponse
{
  "data": [
    {
      "id": "enr_01J...",
      "learner_id": "usr_01J...",
      "course_id": "crs_01J...",
      "status": "active",
      "enrolled_at": "2026-06-09T10:00:00Z"
    }
  ],
  "pagination": { "limit": 50, "next_cursor": null, "has_more": false }
}
GET/progress

Lire les taux de progression, filtrables par apprenant ou formation.

read:progress
Exemple de reponse
{
  "data": [
    {
      "learner_id": "usr_01J...",
      "course_id": "crs_01J...",
      "completion_rate": 72,
      "last_activity_at": "2026-06-09T10:00:00Z"
    }
  ],
  "pagination": { "limit": 50, "next_cursor": null, "has_more": false }
}
GET/certificates

Lister les certificats emis dans le perimetre client.

read:certificates
Exemple de reponse
{
  "data": [
    {
      "id": "cert_01J...",
      "learner_id": "usr_01J...",
      "course_id": "crs_01J...",
      "issued_at": "2026-06-09T10:00:00Z",
      "verification_url": "https://skill-lms.fr/certificate/verify/cert_01J..."
    }
  ],
  "pagination": { "limit": 50, "next_cursor": null, "has_more": false }
}

Erreurs

Erreurs standardisees pour faciliter l integration.

Chaque erreur retourne un code lisible, un message court et un identifiant de requete a transmettre au support si necessaire.

Format
{
  "error": {
    "code": "unauthorized",
    "message": "Authentication is required.",
    "request_id": "req_01J..."
  }
}
400

Parametre invalide

401

Authentification absente ou invalide

403

Scope insuffisant

404

Ressource introuvable dans l organisation

429

Rate limit depasse

500

Erreur interne

Webhooks

Connecter SKILL LMS a un CRM ou outil d automatisation.

Les webhooks sont actives par organisation pendant l onboarding. Les evenements, retries, signatures et journaux de livraison sont cadrables selon le besoin client.

learner.created
enrollment.created
progress.updated
certificate.issued
Payload indicatif
{
  "id": "evt_01J...",
  "type": "certificate.issued",
  "created_at": "2026-06-09T10:00:00Z",
  "organization_id": "org_01J...",
  "data": {
    "certificate_id": "cert_01J...",
    "learner_id": "usr_01J...",
    "course_id": "crs_01J..."
  }
}

Identite

SSO SAML/OIDC et SCIM sont traites comme un onboarding DSI.

La connexion enterprise demande une configuration IdP, des domaines, certificats, attributs et tests de recette. SCIM peut automatiser le cycle de vie des utilisateurs dans un perimetre defini.

SSO

SAML ou OIDC selon l IdP client, avec mapping des attributs et strategie de fallback.

SCIM

Provisioning encadre pour creation, synchronisation et desactivation des utilisateurs.

Limites v1

Ce que cette API ne promet pas.

Cette documentation est partageable en avant-vente, mais elle reste volontairement prudente sur les actions sensibles.

Pas d acces brut a la base de donnees
Pas d ecriture publique en v1
Pas de provisioning hors cadrage SSO/SCIM
Pas de garantie contractuelle sans annexe Entreprise
Pas de cle API cote navigateur
Pas d acces aux donnees d autres organisations