DokumentationProdukteArtim Academy LMSMein LernenMein Lernen V1
Quiz abgeben
Reicht die Antworten eines Versuchs ein und bekommt das Ergebnis.
Die Bewertung entsteht im LMS, nicht beim Aufrufer: Auswahlfragen werden gegen die hinterlegte Lösung gerechnet, Text-, Bild- und Dateifragen gehen in die Handkorrektur. Enthält ein Quiz solche Fragen, ist reviewStatus danach pending_review und score nur das Ergebnis der maschinell prüfbaren Fragen. Hängt das Quiz an einer Lesson, gilt die Lesson mit dem Versuch als abgeschlossen.
POST https://me.api.lms.artim-industries.com/v1/quizzes/{quizId}/results
| Methode | POST |
| Basis | me.api.lms.artim-industries.com/v1 |
| Scope | lms.me.quizzes:write |
| Antwort | 201 |
| Zugang | Developer Mitgliedschaft |
| Auth | Authorization: Bearer lmsapi_… |
Parameter
| Parameter | Ort | Typ | Pflicht | Bedeutung |
|---|---|---|---|---|
quizId | Pfad | string | ja | Die Kennung des Quiz. |
Anfragekörper
| Feld | Typ | Bedeutung |
|---|---|---|
answers | object | Die Antworten als Zuordnung questionId → Antwort: bei single der gewählte Text, bei multiple eine Liste davon, bei text die Zeichenkette, bei image und file die Adresse der Abgabe. |
Felder, die der Vertrag nicht nennt, werden verworfen — ein Client kann keine eigenen Felder unterschieben.
{
"answers": {
"qst_01": "Einen Typparameter",
"qst_02": ["Generics", "Unions"],
"qst_03": "Weil der Typ erst am Aufrufort feststeht."
}
}
Anfrage
curl -X POST "https://me.api.lms.artim-industries.com/v1/quizzes/{quizId}/results" \
-H "Authorization: Bearer lmsapi_…" \
-H "Content-Type: application/json" \
-d '{ "answers": { "qst_01": "Einen Typparameter", "qst_02": ["Generics", "Unions"], "qst_03": "Weil der Typ erst am Aufrufort feststeht." } }'
Antwort
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Die Kennung des Ergebnisses. |
score | number | Das Ergebnis in Prozent. |
passed | boolean | Ob es die Schwelle des Quiz erreicht. |
reviewStatus | string | passed, failed oder pending_review. |
gradedQuestions | integer | Wie viele Fragen maschinell bewertet wurden. |
{ "id": "qrs_8802", "score": 80, "passed": true, "reviewStatus": "passed", "gradedQuestions": 10 }
Fehler
| Status | code | Wann |
|---|---|---|
400 | invalid_request | Ein Pflichtfeld fehlt, ein Typ passt nicht, oder ein Verweis zeigt auf etwas, das es hier nicht gibt. |
401 | invalid_token | Bearer fehlt, ist unbekannt oder abgelaufen. |
403 | missing_scope | Das Token trägt den Scope dieses Endpunkts nicht. |
404 | not_found | Der Eintrag gehört nicht zum freigegebenen Akademie — oder die Anfrage kam auf der falschen Subdomain an. |
409 | conflict | Der Zustand verbietet die Änderung — der Fehlerkörper nennt den Grund. |
429 | rate_limited | Kontingent erschöpft, siehe Retry-After. |
Jede Fehlerantwort trägt dieselbe Hülle: error.code benennt den Fehler, error.message sagt in einem Satz, was fehlt.
Rate Limits
Das Limit gilt pro Team, nicht pro Token.
| Zugang | Produktion | Sandbox |
|---|---|---|
| Hobby | 60 Anfragen/Minute | ohne Limit |
| Developer Mitgliedschaft | 10.000 Anfragen/Minute | ohne Limit |
Bei 429 sagt der Retry-After-Header, wie lange du warten sollst.