Fortschritt
Lesen Sie den Schulungsfortschritt eines Benutzers: Übung (pro Challenge), Lernen (pro Szenario) und aktive Zuweisungen. Alle Endpunkte sind read-only und erfordern den progress:read-Geltungsbereich. Die Granularität ist absichtlich fein — die meisten LMS-Sync- und BI-Pipelines müssen nur diese drei Endpunkte pro Benutzer abfragen.
Endpunkte
| Methode | Pfad | Geltungsbereich | Zweck |
|---|---|---|---|
GET | /users/{'{'}userId{'}'}/practice-progress | progress:read | Abgeschlossene Übungs-Challenges mit Punktzahlen und Zeitstempeln. |
GET | /users/{'{'}userId{'}'}/learn-progress | progress:read | Lern-Modus-Szenarien mit Status. |
GET | /users/{'{'}userId{'}'}/assignments | progress:read | Aktive Zuweisungen für den Benutzer mit Fortschrittsprozent. |
Beachten Sie, dass diese Routen auf der Root-Ebene der API sitzen — /api/public/v1/users/{'{'}userId{'}'}/…, nicht unter /progress/. {'{'}userId{'}'} ist die SecureCodingHub-Benutzer-ID, die von der Users-API und Webhook-Payloads zurückgegeben wird.
Übungsfortschritt
Eine Zeile pro Challenge, die der Benutzer abgeschlossen hat. Übungs-Topics bestehen aus mehreren Challenges (indiziert ab 0), und jede Challenge läuft durch zwei Phasen — Schwachstellenidentifikation und Patch-Auswahl — die unabhängig bewertet werden.
GET /api/public/v1/users/{userId}/practice-progress
Authorization: Bearer scs_live_…Antwort
[
{
"topicId": "sql-injection",
"challengeIndex": 0,
"language": "python",
"score": 100,
"phase1Score": 50,
"phase2Score": 50,
"phase1HintUsed": false,
"phase2HintUsed": false,
"completedAt": "2026-05-20T14:32:08Z"
},
{
"topicId": "sql-injection",
"challengeIndex": 1,
"language": "python",
"score": 80,
"phase1Score": 30,
"phase2Score": 50,
"phase1HintUsed": true,
"phase2HintUsed": false,
"completedAt": "2026-05-21T09:14:55Z"
},
{
"topicId": "xss",
"challengeIndex": 0,
"language": "javascript",
"score": 100,
"phase1Score": 50,
"phase2Score": 50,
"phase1HintUsed": false,
"phase2HintUsed": false,
"completedAt": "2026-05-22T11:48:31Z"
}
]topicId— Katalog-ID des Übungs-Topics (z.B.sql-injection,xss,ssrf).challengeIndex— null-basierter Index der Challenge innerhalb des Topics.language— Sprache, in der der Benutzer die Challenge gelöst hat.score— Gesamt aus 100.phase1Scoreundphase2Scoreergeben zusammenscore; jede ist aus 50.phase1HintUsed/phase2HintUsed— boolesch; der Client entscheidet, was die Hinweis-Nutzung kostet, der Server zeichnet nur das Flag und die resultierende Punktzahl auf.completedAt— ISO 8601 UTC-Zeitstempel des letzten Abschlusses.
Nur abgeschlossene Challenges erscheinen in dieser Liste. In-Flight-Versuche werden nicht offengelegt.
Beispiel
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/practice-progressLernfortschritt
Eine Zeile pro Lern-Modus-Szenario, das der Benutzer geöffnet hat. Lern-Szenarien sind geführte Walkthroughs, verfolgt nach Schrittzahl und einem groben status-Feld.
GET /api/public/v1/users/{userId}/learn-progress
Authorization: Bearer scs_live_…Antwort
[
{
"scenarioId": "auth-bypass-walkthrough",
"currentStep": 8,
"totalSteps": 8,
"status": "completed",
"startedAt": "2026-05-18T13:02:11Z",
"completedAt": "2026-05-18T13:41:07Z",
"lastAccessAt": "2026-05-18T13:41:07Z"
},
{
"scenarioId": "jwt-tampering",
"currentStep": 3,
"totalSteps": 7,
"status": "started",
"startedAt": "2026-05-23T16:20:00Z",
"completedAt": null,
"lastAccessAt": "2026-05-24T10:08:42Z"
}
]scenarioId— Katalog-ID des Szenarios.currentStep/totalSteps— Fortschritt innerhalb des Szenarios. Wenn gleich, ist das Szenario beendet.status— eines vonstartedodercompleted.completedAt—nullbis das Szenario beendet ist.lastAccessAt— letztes Mal, dass der Benutzer das Szenario geöffnet hat, unabhängig davon, ob er Fortschritte gemacht hat.
Beispiel
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/learn-progressZuweisungen
Aktive Zuweisungen für den Benutzer, mit einem vorberechneten Abschlussprozentsatz, sodass Sie sich nicht selbst gegen Übungs- und Lernfortschritt joinen müssen. Beinhaltet Zuweisungen auf Benutzer-, Team- und Organisationsebene, die auf diese Person heruntergebrochen sind.
GET /api/public/v1/users/{userId}/assignments
Authorization: Bearer scs_live_…Antwort
[
{
"id": "f1a2b3c4-d5e6-4708-8192-03405e6f7081",
"contentArea": "practice",
"targetType": "topic",
"targetId": "sql-injection",
"targetTitle": "SQL Injection",
"deadline": "2026-06-15T00:00:00Z",
"isMandatory": true,
"isOverdue": false,
"isCompleted": false,
"totalItems": 5,
"completedItems": 2,
"progressPercent": 40.0,
"note": "Assigned after CodeQL finding in payments-api."
},
{
"id": "a2b3c4d5-e6f7-4081-9203-405e6f708192",
"contentArea": "learn",
"targetType": "scenario",
"targetId": "auth-bypass-walkthrough",
"targetTitle": "Auth Bypass Walkthrough",
"deadline": "2026-05-31T00:00:00Z",
"isMandatory": false,
"isOverdue": false,
"isCompleted": true,
"totalItems": 1,
"completedItems": 1,
"progressPercent": 100.0,
"note": null
}
]contentArea—practiceoderlearn.targetType— für Übung:category,module,topicodercustom-course. Für Lernen:course,scenarioodercustom-course.isOverdue—true, wenn die Frist abgelaufen ist und die Zuweisung noch nicht abgeschlossen ist.progressPercent— Abschlussquote skaliert auf 0–100.
Beispiel
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/assignmentsPolling-Muster
Für LMS- oder BI-Pipelines ist eine stündliche Batch-Abfrage normalerweise ausreichend — Übungs- und Lernfortschritt ändert sich nur, wenn ein Benutzer Arbeit abschließt. Für engere Live-Dashboards auf der Zuweisungsseite abonnieren Sie das assignment.completed-Webhook anstelle von Polling; siehe Webhooks. Es gibt kein practice.completed- oder learn.completed-Ereignis in v1 — fragen Sie diese Endpunkte dafür ab.