15 février 2026 · 15 min read

LTI AGS

Gérer le gradebook, envoyer des notes, synchroniser les résultats

#LTI #e-learning #standard #Grade

LTI 1.3 définit le socle : sécuriser les échanges et identifier les utilisateurs. LTI Advantage va plus loin en ajoutant des services qui permettent une intégration plus profonde entre l’outil et le LMS. Cet article détaille le premier de ces services : Assignment and Grade Services (AGS).

L’AGS permet à un outil externe d’interagir avec le gradebook du LMS — créer des colonnes de notes, envoyer les résultats des apprenants, et récupérer les notes telles que le LMS les a enregistrées.

Tous les appels AGS sont sécurisés via le Security Framework OAuth 2.0 décrit dans l’article sur la sécurité LTI1.3.

Assignment and Grade Services (AGS)

La plupart des LMS proposent un gradebook c’est-à-dire un endroit où sont centralisées toutes les notes de tous les apprenants. Il peut être par cours, dans ce cas le gradebook présente les notes de toutes les activités du cours. Lorsqu’un outil externe propose du contenu tel qu’un QCM, il doit pouvoir envoyer les résultats des apprenants vers ce gradebook.

C’est ce que propose l’AGS :

  • un service pour créer et gérer les lineitems, c’est-à-dire les colonnes du gradebook, ce service se nomme lineitem service
  • un service pour envoyer les scores, c’est-à-dire envoyer les résultats d’évaluation, ce service se nomme Score Service
  • un service pour récupérer les Résultats. (Results Service)

Voici le gradebook d’un cours dans Moodle, on voit que pour chaque activité (devoir, quizz, etc.) il y a une colonne correspondante dans le gradebook. L’AGS permet à un outil externe de créer ces colonnes et d’envoyer les notes des apprenants pour chacune de ces colonnes.

gradebook Moodle

Pour en savoir plus, vous pouvez lire la documentation de Moodle ici ou celle de Canvas ici.

claim AGS

La spécification 1EdTech propose d’ajouter cette iri au message LTI Launch https://purl.imsglobal.org/spec/lti-ags/claim/endpoint.

Par exemple si l’administrateur a autorisé l’outil à utiliser l’AGS,

Activation AGS Moodle

l’id token devient

{
"nonce": "32d5072797ec4703a23433996f85c3ea61b3e5ff30f311f18c518cb87ec90090",
"iat": 1775395730,
"exp": 1775395790,
"iss": "http://localhost",
"aud": "Sfc6HFnwHAx4Tuv",
"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "1",
"https://purl.imsglobal.org/spec/lti/claim/target_link_uri": "http://localhost:8000/lti/launch/",
"sub": "2",
"https://purl.imsglobal.org/spec/lti/claim/lis": {
"person_sourcedid": "",
"course_section_sourcedid": ""
},
"https://purl.imsglobal.org/spec/lti/claim/roles": [
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator",
"http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor",
"http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator"
],
"https://purl.imsglobal.org/spec/lti/claim/context": {
"id": "2",
"label": "pyLTI",
"title": "PYTHON LTI",
"type": [
"CourseSection"
]
},
"https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest",
"https://purl.imsglobal.org/spec/lti/claim/resource_link": {
"title": "Hello Django LTI",
"description": "",
"id": "1"
},
"given_name": "Admin",
"family_name": "Utilisateur",
"name": "Admin Utilisateur",
"https://purl.imsglobal.org/spec/lti/claim/ext": {
"user_username": "admin",
"lms": "moodle-2"
},
"email": "admin@localhost.fr",
"https://purl.imsglobal.org/spec/lti/claim/launch_presentation": {
"locale": "fr",
"document_target": "frame",
"return_url": "http://localhost/mod/lti/return.php?course=2&launch_container=5&instanceid=1&sesskey=M4moqhsjEQ"
},
"https://purl.imsglobal.org/spec/lti/claim/tool_platform": {
"product_family_code": "moodle",
"version": "2025100603.11",
"guid": "aa85caf65877b6e8f2e5cfd314c9805e",
"name": "local",
"description": "localhost"
},
"https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0",
"https://purl.imsglobal.org/spec/lti/claim/custom": {
"niveau": "Terminale",
"debut_cours": "2026-04-03T23:00:00+00:00",
"fin_cours": "2027-04-03T23:00:00+00:00"
},
"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
"scope": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1"
}
}

On constate alors qu’a été ajouté

"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
"scope": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1"
}

Il y a deux propriétés importantes à noter dans cette section :

  1. scope : Il s’agit d’un tableau de chaînes qui définit les autorisations accordées à l’outil. Dans cet exemple, l’outil a la permission de lire les éléments de ligne, les résultats. L”outil peut aussi envoyer des scores, c’est-à-dire des notes brutes. Ces scopes déterminent les actions que l’outil peut effectuer sur les données du gradebook du LMS. Par exemple, si l’outil a le scope lineitem.readonly, il peut lire les éléments de ligne, mais ne peut pas les modifier. Si l’outil a le scope Score, il peut envoyer des scores (notes) pour les étudiants.

  2. lineitems : C’est l’URL proposée par le LMS, qui permet à l’outil d’accéder aux éléments de ligne spécifiques pour le cours. Cela permet à l’outil de récupérer les notes des étudiants dans le gradebook du LMS. c’est la collection de toutes les colonnes du gradebook pour ce cours. L’outil peut y lister ou créer des colonnes.

Si l’enseignant autorise à son tour l’outil à utiliser l’AGS dans Moodle, la propriété lineitem est ajoutée. Cette propriété est ajoutée dès qu’une colonne spécifique du gradebook est associée à l’activité LTI.

Activation deployment AGS Moodle

"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
"scope": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem",
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1",
"lineitem": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1"
}

lineitem est l’URL d’une colonne spécifique du gradebook, c’est-à-dire d’un élément de ligne. L’outil peut y accéder pour récupérer ou modifier les notes des étudiants pour cette colonne spécifique.

Pour manipuler des lineitems ou des lineitem l’outil doit envoyer une requête HTTP avec un header d’autorisation contenant un token d’accès (access token) obtenu via le protocole OAuth 2.0. Le token d’accès doit inclure les scopes appropriés pour les actions que l’outil souhaite effectuer sur les lineitems ou lineitem. Les méthodes HTTP autorisées dépendent des scopes accordés à l’outil.

Lorsque le scope contient readonly, l’outil ne peut effectuer que des requêtes de type GET. Si readonly n’est pas présent, l’outil peut effectuer des requêtes de type POST, PUT et DELETE selon les besoins.

Par exemple pour les scopes concernant les lineitems :

ScopeMéthode HTTP
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonlyGET
https://purl.imsglobal.org/spec/lti-ags/scope/lineitemPOST
https://purl.imsglobal.org/spec/lti-ags/scope/lineitemPUT
https://purl.imsglobal.org/spec/lti-ags/scope/lineitemDELETE

Pour avoir plus d’informations sur les requêtes à effectuer 1EdTech met a disposition une documentation au format OpenAPI avec Swagger ui , disponible ici.

Pour plus de détails sur chaque requête la spécification est disponible ici

Manipuler des colonnes du gradebook

1EdTech propose un service pour manipuler les colonnes du gradebook, c’est-à-dire les lineitems. L’outil peut créer une nouvelle colonne dans le gradebook en envoyant une requête POST sur l’URL de lineitems avec les informations de la colonne à créer. Ce qui peut être pratique quand un outil propose plusieurs évaluations distinctes pour une seule activité LTI. Par exemple : Un outil de langue avec une seule activité LTI mais plusieurs compétences évaluées séparément :

  • Colonne “Expression écrite”
  • Colonne “Expression orale”
  • Colonne “Grammaire”

L’URL pour créer une colonne se trouve toujours dans l’id token cette fois c’est l’URL lineitems qui doit être utilisée. Dans le token présenté dans la section modèle de données on trouve l’URL suivante :

lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1

Pour créer une nouvelle colonne :

POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Content-Type: application/vnd.ims.lis.v2.lineitem+json
{
"label": "Expression écrite",
"scoreMaximum": 100,
"resourceId": "1",
"tag": "écrit"
}
  • label : C’est le nom de la colonne, ce paramètre est obligatoire
  • scoreMaximum : définit le barème de l’évaluation, il permet au LMS de replacer la note dans son contexte. Sans lui, un 15 ne veut rien dire. La note sera donc comprise entre 0 et cette valeur.
  • resourceId : C’est l’identifiant de la ressource interne à l’outil, par exemple l’identifiant de l’exercice. Lorsque l’on souhaitera récupérer les colonnes du gradebook il sera possible de filtrer par ce paramètre.
  • tag : c’est une étiquette permettant d’ajouter une information sur une ou plusieurs colonnes. Dans l’exemple ci-dessus d’un outil d’apprentissage des langues on pourrait avoir le tag partiel pour les colonnes Compréhension écrite, Expression orale, Grammaire, l’outil peut ajouter une colonne supplémentaire total avec le tag grade.

Exemple :

Colonne 1 : Compréhension écrite compte 30% de la note finale
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Content-Type: application/vnd.ims.lis.v2.lineitem+json
{
"label": "Compréhension écrite",
"scoreMaximum": 30,
"resourceId": "1",
"tag": "partiel"
}
Colonne 2 : Expression orale compte 40% de la note finale
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Content-Type: application/vnd.ims.lis.v2.lineitem+json
{
"label": "Expression orale",
"scoreMaximum": 40,
"resourceId": "1",
"tag": "partiel"
}
Colonne 3 : Grammaire compte 30% de la note finale
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Content-Type: application/vnd.ims.lis.v2.lineitem+json
{
"label": "Grammaire",
"scoreMaximum": 30,
"resourceId": "1",
"tag": "partiel"
}
Colonne 4 : Total compte 100% de la note finale
POST http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Content-Type: application/vnd.ims.lis.v2.lineitem+json
{
"label": "Total",
"scoreMaximum": 100,
"resourceId": "1",
"tag": "grade"
}

Cela signifie que l’outil d’apprentissage des langues propose un détail de correction ainsi qu’une note finale.

  • L’expression orale compte pour 40% de la note finale
  • la compréhension écrite compte pour 30% de la note finale
  • La Grammaire compte pour 30% de la note finale
  • Le total est une note sur 100.

Il est également possible de faire le lien entre les colonnes du gradebook et les activités LTI. Par exemple, si l’outil propose plusieurs activités LTI pour un même cours, il peut créer une colonne de gradebook pour chaque activité. Le paramètre resourceLinkId rattache une colonne à une activité LTI précise du cours — celle dont l’identifiant est transmis dans le JWT de launch via resource_link.id. C’est utile pour que le LMS sache quelle colonne appartient à quelle activité, et pour que la colonne soit automatiquement nettoyée si l’activité est supprimée.

Récupérer les colonnes du gradebook

GET http://localhost/mod/lti/services.php/2/lineitems?type_id=1
Authorization: Bearer <access_token>
Accept: application/vnd.ims.lis.v2.lineitemcontainer+json

Le LMS renvoie :

[
{
"id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1",
"label": "Expression écrite",
"scoreMaximum": 100,
"resourceId": "1",
"tag": "écrit",
"resourceLinkId": "1"
},
{
"id": "http://localhost/mod/lti/services.php/2/lineitems/3/lineitem?type_id=1",
"label": "Expression orale",
"scoreMaximum": 40,
"resourceId": "1",
"tag": "partiel",
"resourceLinkId": "1"
},
{
"id": "http://localhost/mod/lti/services.php/2/lineitems/4/lineitem?type_id=1",
"label": "Grammaire",
"scoreMaximum": 30,
"resourceId": "1",
"tag": "partiel",
"resourceLinkId": "1"
},
{
"id": "http://localhost/mod/lti/services.php/2/lineitems/5/lineitem?type_id=1",
"label": "Total",
"scoreMaximum": 100,
"resourceId": "1",
"tag": "grade",
"resourceLinkId": "1"
}
]

Score service

Dans cette partie nous allons voir comment envoyer un score au LMS, soit après avoir créé une colonne supplémentaire à l’aide de lineitems soit en utilisant une colonne existante via lineitem. Un score est plus complexe qu’une simple valeur numérique. En effet, si l’outil envoie seulement une note alors le LMS peut ne pas être en mesure de l’interpréter correctement. Que signifie avoir eu 18 à un devoir ? Si le devoir est noté sur 20 alors 18 correspond à une très bonne note, mais si le devoir est noté sur 100 alors 18 correspond à une note très faible. C’est pour cela que le service de score permet d’envoyer des informations supplémentaires telles que la note maximale, le progrès de l’activité et d’autres propriétés permettant de contextualiser la note.

modèle de données

1EdTech propose les propriétés suivantes pour le service de score :

{
"timestamp": "2023-03-15T12:00:00Z",
"scoreGiven": 15,
"scoreMaximum": 20,
"comment" : "Très bon travail !",
"activityProgress": "Completed",
"userId": "12345",
"gradingProgress": "FullyGraded",
"scoringUserId": "4567890",
"submission": {
"submittedAt": "2023-03-15T12:00:00Z",
"startedAt": "2023-03-15T12:00:00Z"
}
}
  • timestamp : La date et l’heure à laquelle la note a été attribuée
  • scoreGiven (optionnel) : La note obtenue par l’apprenant
  • scoreMaximum (Obligatoire si scoreGiven est présent) : La note maximale possible pour l’évaluation
  • comment (optionnel) : Un commentaire facultatif sur la note
  • activityProgress (optionnel) : Cette propriété décrit ce que l’apprenant a fait dans l’activité, indépendamment de toute note. Cette propriété ne peut prendre que les suivantes :
    • Initialized : l’activité a été créée côté outil, mais l’apprenant ne l’a pas encore ouverte
    • Started : l’apprenant a ouvert l’activité
    • InProgress : L’apprenant est en train de travailler sur l’activité
    • Submitted : l’apprenant a soumis l’activité, il attend une correction
    • Completed : l’apprenant a terminé l’activité. Bien que l’activité soit terminée, la notation peut ne pas être terminée. Par exemple, un devoir peut être terminé, mais en attente de correction par l’enseignant.
  • userId (obligatoire) : L’identifiant de l’utilisateur ayant reçu la note
  • gradingProgress (optionnel) : l’état d’avancement de la notation pour cette note. Cette propriété ne peut prendre que les suivantes :
    • NotReady: l’activité n’est pas encore prête à être notée
    • Pending : une note a été calculée, mais l’outil la traite encore en interne avant de l’envoyer définitivement
    • PendingManual : L’activité nécessite une correction manuelle par un enseignant le LMS ne doit pas encore afficher de note finale
    • Failed : la tentative de notation a échoué, le LMS doit ignorer cette note
    • FullyGraded : la note a été entièrement attribuée et est maintenant finale, le LMS peut afficher la note dans le gradebook
  • scoringUserId (optionnel) : L’identifiant de l’utilisateur ayant attribué la note
  • submission (optionnel) : Métadonnées sur la tentative de l’apprenant. Contient deux propriétés :
    • startedAt : La date et l’heure à laquelle l’apprenant a commencé à travailler sur l’activité
    • submittedAt : La date et l’heure à laquelle l’apprenant a soumis son travail

activityProgress et gradingProgress fonctionnent ensemble et donne du sens sur les interactions de l’apprenant avec l’activité.

SituationactivityProgressgradingProgress
L’apprenant commence le quizzStartedNotReady
L’apprenant soumet, correction auto en coursSubmittedPending
Correction auto terminée, note affichableCompletedFullyGraded
L’apprenant soumet un devoir à corriger manuellementSubmittedPendingManual
L’enseignant a corrigé le devoirCompletedFullyGraded

LTI offre ici un début de solution pour envoyer des traces d’apprentissage. En effet, grâce à la propriété activityProgress l’outil peut envoyer des informations sur l’avancement de l’activité. Par exemple, un outil de lecture de vidéo peut envoyer une trace lorsque l’apprenant commence à regarder la vidéo (Started), lorsqu’il regarde la moitié de la vidéo (InProgress) et lorsqu’il termine de regarder la vidéo (Completed). Ces traces d’apprentissage peuvent ensuite être utilisées par certains LMS pour suivre l’engagement des apprenants avec le contenu et pour fournir des analyses sur les activités d’apprentissage. C’est moins complet que des standards tels que XAPI ou Caliper mais c’est un début pour permettre aux outils d’envoyer des données d’engagement au LMS.

Envoi du score

Nous avons vu précédemment que lorsqu’un administrateur autorise un outil à envoyer des scores, des propriétés supplémentaires étaient envoyées dans l’id token dont cet exemple :

"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
"scope": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem",
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "http://localhost/mod/lti/services.php/2/lineitems?type_id=1",
"lineitem": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1"
}

on voit que le LMS renvoie une URL pour lineitem et une url pour lineitems. L’outil peut choisir d’envoyer le score sur une colonne spécifique du gradebook en utilisant l’URL de lineitem ou peut utiliser lineitems pour créer une nouvelle colonne (donc un nouveau lineitem) puis envoyer un score sur le lineitem correspondant.

Le scope https://purl.imsglobal.org/spec/lti-ags/scope/score doit être présent. Le scope score permet uniquement l’envoi de scores via des requêtes POST. Il n’est donc pas permis à un outil de lire (HTTP GET) un score depuis le LMS.

Le score s’envoie via un POST sur l’URL du lineitem suivi de /scores, voici un exemple complet de requête pour envoyer un score de 15/20 à l’apprenant avec l’id 2 pour le lineitem d’id 2 :

curl -X POST "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/scores?type_id=1" \
-H "Authorization: Bearer 3fb6d0814e527e96ec6d9d8b68f19c0f" \
-H "Content-Type: application/vnd.ims.lis.v1.score+json" \
-H "Accept: application/vnd.ims.lis.v1.score+json" \
-d '{
"timestamp": "2026-05-20T18:42:31.320Z",
"scoreGiven": 15,
"scoreMaximum": 20,
"comment": "Très bon travail !",
"activityProgress": "Completed",
"gradingProgress": "FullyGraded",
"userId": "5"
}'

Le content-type est un peu particulier, car il doit être au format application/vnd.ims.lis.v1.score+json.

on obtient :

Réponse score service

Moodle affiche 75 % dans le gradebook, car dans l’activité j’ai spécifié accepter les notes en tant que point et que la note maximum c’est 80. Le LMS fait un calcul pour convertir la note en pourcentage : (15/20) * 100 = 75 %. C’est donc le LMS qui décide comment interpréter la note envoyée par l’outil et comment l’afficher dans le gradebook.

Décision de la note minimale pour valider l'activité

L’outil considère que c’est un très bon travail, mais si l’enseignant ou l’administrateur du LMS décide que pour valider cette activité il faut atteindre 18/20, l’apprenant verra l’activité comme échouée.

Si j’envoie ce type de requête :

curl -X POST "http://localhost/mod/lti/services.php/2/lineitems/5/lineitem/scores?type_id=2" \\
-H "Authorization: Bearer 830658bfd7ffb2eec9c20f706a6e675d" \
-H "Content-Type: application/vnd.ims.lis.v1.score+json" \
-H "Accept: application/vnd.ims.lis.v1.score+json" \
-d '{
"timestamp": "2026-05-20T19:48:35.320Z",
"activityProgress": "InProgress",
"gradingProgress": "NotReady",
"userId": "5"
}'

Rien ne s’affiche sur Moodle, mais Canvas affiche que l’activité est en cours et que la notation n’est pas encore prête. Tous les LMS ne gèrent pas forcément les propriétés activityProgress et gradingProgress, mais c’est un bon moyen pour l’outil d’envoyer des informations sur l’avancement de l’activité et de la notation au LMS.

Le Score Service se complète avec le Submission Review Message, une spec complémentaire qui permet à l’enseignant de lancer l’outil directement depuis le gradebook pour corriger une soumission PendingManual. Ce mécanisme est détaillé dans un article dédié.

Result service

Dans la section précédente, nous avons vu que c’est l’outil qui envoie le score. Cependant, le LMS doit avoir le contrôle de ce score, car ça reste lui qui gère les résultats des apprenants. Le LMS peut décider d’accepter ou de rejeter le score envoyé par l’outil, et il peut également mettre à jour le score ultérieurement si nécessaire.

Prenons l’exemple d’un apprenant qui travaille sur un devoir d’anglais, l’outil envoie un score de 15/20 pour ce devoir. Cependant, l’enseignant peut ne pas être d’accord avec ce score et décider de le modifier. Par exemple, après avoir pris connaissance du devoir, l’enseignant peut estimer que les erreurs de l’apprenant sont sur des questions non abordées à son cours. Il peut alors décider de ne pas prendre en compte ces erreurs et de mettre à jour le score à 18/20. Il y a donc un déphasage : l’outil conserve 15/20 dans sa base de données alors que le LMS, source de vérité, affiche 18/20 à l’apprenant.

Pour résoudre ce problème, 1EdTech propose un service de résultats (Result service) qui permet à l’outil de récupérer les résultats des apprenants depuis le LMS. L’outil peut ainsi synchroniser sa base de données avec les notes réelles du LMS et éviter les problèmes de déphasage.

Modèle de données

{
"id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results/2",
"scoreOf": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1",
"userId": "2",
"resultScore": 15,
"resultMaximum": 20,
"comment": "Très bon travail !"
}
  • id : URL unique du résultat, assignée par le LMS
  • scoreOf : URL du lineitem auquel ce résultat est associé
  • userId : L’identifiant de l’apprenant — correspond au sub du JWT de launch
  • resultScore : La note telle que le LMS l’a enregistrée
  • resultMaximum : La note maximale telle que le LMS l’a enregistrée
  • comment (optionnel) : Le commentaire associé à la note

Récupération des résultats

L’URL du service résulte directement de l’URL du lineitem il suffit d’ajouter /results :

GET http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1
Authorization: Bearer <access_token>
Accept: application/vnd.ims.lis.v2.resultcontainer+json

Le LMS retourne un tableau de résultats, un par apprenant ayant un score enregistré.

on obtient un tableau de résultats, un par apprenant ayant un score enregistré pour ce lineitem.

[
{
"id": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1&user_id=5",
"userId": "5",
"resultScore": 75,
"resultMaximum": 100,
"comment": "Très bon travail !",
"scoreOf": "http://localhost/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1",
"timestamp": "2026-05-20T19:42:31+01:00"
}
]

Ici on peut voir qu’il n’y a qu’un seul résultat, car il n’y a qu’un seul apprenant ayant un score enregistré pour ce lineitem. On remarque que l’outil a envoyé 15/20 mais le LMS retourne 75/100. C’est Moodle qui a converti selon son propre barème. C’est précisément ce déphasage que le Result service permet de détecter.

Pour filtrer sur un seul apprenant, on ajoute le paramètre user_id :

GET http://localhost/mod/lti/services.php/2/lineitems/2/lineitem/results?type_id=1&user_id=2
Authorization: Bearer <access_token>
Accept: application/vnd.ims.lis.v2.resultcontainer+json

Pour plus de détails la spécification est disponible ici.

Conclusion

Noter un devoir, un exercice et intégrer cette note de manière synchronisée dans le gradebook du LMS est une fonctionnalité clé pour les outils d’apprentissage. LTI AGS offre un cadre standardisé pour permettre aux outils d’envoyer des notes, de créer des colonnes dans le gradebook et de récupérer les résultats tels que le LMS les a enregistrés. Il est important de noter que le LMS reste la source de vérité pour les notes des apprenants, et que l’outil doit se synchroniser avec le LMS pour éviter les problèmes de déphasage. AGS permet également d’envoyer des informations sur l’avancement de l’activité et de la notation, ce qui peut être utile pour suivre l’engagement des apprenants avec le contenu.

Partager