DokumentationProdukteArtim Academy LMSKurseKurse V1
Lesson anlegen
In API Explorer austestenÖffnet den Explorer mit Methode und Pfad dieses Requests.
Legt eine Lesson in einem Modul des Kurses an.
type: "external" verlangt eine freigegebene Lesson-App: content.externalAppId muss die Kennung einer App sein, die die Plattform für diese Akademie freigegeben hat, und content.externalUrl ihre Startadresse. Wie eine solche App entsteht, steht im Lesson-SDK.
POST https://courses.api.lms.artim-industries.com/v1/courses/{id}/lessons
| Methode | POST |
| Basis | courses.api.lms.artim-industries.com/v1 |
| Scope | lms.courses.lessons: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 |
|---|---|---|
moduleId | string | Das Modul, in das sie gehört. Pflicht. |
title | string | Der Titel. Pflicht. |
type | string | video, text, quiz, assignment, code-review oder external. Pflicht. |
order | integer | Die Position im Modul. |
duration | integer | Geschätzte Dauer in Minuten. |
content | object | Der Inhalt — videoUrl, text, attachments, oder bei external externalAppId und externalUrl. |
Felder, die der Vertrag nicht nennt, werden verworfen — ein Client kann keine eigenen Felder unterschieben.
{
"moduleId": "mod_02",
"title": "Generics",
"type": "video",
"order": 3,
"duration": 18,
"content": { "videoUrl": "https://cdn.example.com/generics.mp4" }
}
Anfrage
curl -X POST "https://courses.api.lms.artim-industries.com/v1/courses/{id}/lessons" \
-H "Authorization: Bearer lmsapi_…" \
-H "Content-Type: application/json" \
-d '{ "moduleId": "mod_02", "title": "Generics", "type": "video", "order": 3, "duration": 18, "content": { "videoUrl": "https://cdn.example.com/generics.mp4" } }'
Antwort
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Die Kennung der neuen Lesson. |
title | string | Der Titel. |
order | integer | Die Position. |
{ "id": "lsn_44b1", "title": "Generics", "order": 3 }
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.