DokumentationProdukteArtim Academy LMSCode-ReviewsCode-Reviews V1

Code-Review anlegen

2 min Lesezeit · zuletzt aktualisiert 18. August 2026

In API Explorer austestenÖffnet den Explorer mit Methode und Pfad dieses Requests.

Stellt einen Diff zur Review in einem Kurs.

files trägt den Diff, wie er im LMS angezeigt wird. Wer aus einem echten Patch kommt, zerlegt ihn vorher: jede Zeile wird ein Eintrag mit type und den beiden Zeilennummern.

POST https://code-reviews.api.lms.artim-industries.com/v1/courses/{courseId}/code-reviews
MethodePOST
Basiscode-reviews.api.lms.artim-industries.com/v1
Scopelms.codeReviews:write
Antwort201
ZugangDeveloper Mitgliedschaft
AuthAuthorization: Bearer lmsapi_…

Parameter

ParameterOrtTypPflichtBedeutung
courseIdPfadstringjaDie Kennung des Kurses aus der Kursliste.

Anfragekörper

FeldTypBedeutung
titlestringDer Titel. Pflicht.
subtitlestringDie Unterzeile — meist der Branch-Name.
briefstringDie Aufgabenstellung über dem Diff.
lessonIdstringDie Lesson, an der sie hängt.
sourceBranchstringDer Branch, aus dem der Diff kommt.
baseBranchstringDer Branch, gegen den er läuft.
filesarrayDie Dateien als {path, language, lines} mit lines als {type, oldNum, newNum, text}. Pflicht.

Felder, die der Vertrag nicht nennt, werden verworfen — ein Client kann keine eigenen Felder unterschieben.

{
  "title": "Result-Typ einführen",
  "subtitle": "feat/result-type",
  "brief": "Finde die drei Fehler.",
  "lessonId": "lsn_44b1",
  "sourceBranch": "feat/result-type",
  "baseBranch": "main",
  "files": [
    {
      "path": "src/result.ts",
      "language": "typescript",
      "lines": [{ "type": "add", "newNum": 1, "text": "export type Result<T> = { ok: true; value: T }" }]
    }
  ]
}

Anfrage

curl -X POST "https://code-reviews.api.lms.artim-industries.com/v1/courses/{courseId}/code-reviews" \
  -H "Authorization: Bearer lmsapi_…" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Result-Typ einführen", "subtitle": "feat/result-type", "brief": "Finde die drei Fehler.", "lessonId": "lsn_44b1", "sourceBranch": "feat/result-type", "baseBranch": "main", "files": [ { "path": "src/result.ts", "language": "typescript", "lines": [{ "type": "add", "newNum": 1, "text": "export type Result<T> = { ok: true; value: T }" }] } ] }'

Antwort

FeldTypBedeutung
idstringDie Kennung der neuen Review-Aufgabe.
titlestringDer Titel.
fileCountintegerWie viele Dateien angelegt wurden.
{ "id": "cr_2f60", "title": "Result-Typ einführen", "fileCount": 1 }

Fehler

StatuscodeWann
400invalid_requestEin Pflichtfeld fehlt, ein Typ passt nicht, oder ein Verweis zeigt auf etwas, das es hier nicht gibt.
401invalid_tokenBearer fehlt, ist unbekannt oder abgelaufen.
403missing_scopeDas Token trägt den Scope dieses Endpunkts nicht.
404not_foundDer Eintrag gehört nicht zum freigegebenen Akademie — oder die Anfrage kam auf der falschen Subdomain an.
409conflictDer Zustand verbietet die Änderung — der Fehlerkörper nennt den Grund.
429rate_limitedKontingent 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.

ZugangProduktionSandbox
Hobby60 Anfragen/Minuteohne Limit
Developer Mitgliedschaft10.000 Anfragen/Minuteohne Limit

Bei 429 sagt der Retry-After-Header, wie lange du warten sollst.