DokumentationProdukteArtim Academy LMSKurseKurse V1
Lernpfad anlegen
Legt einen Lernpfad für den Kurs an.
Ein Lernpfad ist ein Graph über die Lessons des Kurses: die Knoten sind Lessons oder Verzweigungen, die Kanten die Reihenfolge. Freigeschaltet ist für einen Schüler, was auf seinem Pfad erreichbar ist — daran hängen auch die Aufgaben und Quizze der Lessons. x und y sind die Koordinaten im Editor des LMS; ohne Angabe werden sie der Reihe nach gesetzt.
POST https://courses.api.lms.artim-industries.com/v1/courses/{id}/learning-paths
| Methode | POST |
| Basis | courses.api.lms.artim-industries.com/v1 |
| Scope | lms.courses.learningPaths:write |
| Antwort | 201 |
| Zugang | Developer Mitgliedschaft |
| Auth | Authorization: Bearer lmsapi_… |
Parameter
| Parameter | Ort | Typ | Pflicht | Bedeutung |
|---|---|---|---|---|
id | Pfad | string | ja | Die Kennung des Kurses. |
Anfragekörper
| Feld | Typ | Bedeutung |
|---|---|---|
name | string | Der Name. Pflicht. |
nodes | array | Die Knoten als {id, type, lessonId, label, x, y} — type ist lesson oder branch. Pflicht. |
edges | array | Die Kanten als {id, fromNodeId, toNodeId, label}. |
Felder, die der Vertrag nicht nennt, werden verworfen — ein Client kann keine eigenen Felder unterschieben.
{
"name": "Standardweg",
"nodes": [
{ "id": "nd_1", "type": "lesson", "lessonId": "lsn_11a0", "label": "Einstieg", "x": 0, "y": 0 },
{ "id": "nd_2", "type": "lesson", "lessonId": "lsn_2b3c", "label": "Generics", "x": 220, "y": 0 }
],
"edges": [{ "id": "ed_1", "fromNodeId": "nd_1", "toNodeId": "nd_2" }]
}
Anfrage
curl -X POST "https://courses.api.lms.artim-industries.com/v1/courses/{id}/learning-paths" \
-H "Authorization: Bearer lmsapi_…" \
-H "Content-Type: application/json" \
-d '{ "name": "Standardweg", "nodes": [ { "id": "nd_1", "type": "lesson", "lessonId": "lsn_11a0", "label": "Einstieg", "x": 0, "y": 0 }, { "id": "nd_2", "type": "lesson", "lessonId": "lsn_2b3c", "label": "Generics", "x": 220, "y": 0 } ], "edges": [{ "id": "ed_1", "fromNodeId": "nd_1", "toNodeId": "nd_2" }] }'
Antwort
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Die Kennung des neuen Lernpfads. |
name | string | Der Name. |
{ "id": "lp_88a2", "name": "Standardweg" }
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.