Dokümanlar/API ve Webhook'lar/Atamalar

Atamalar

Atamalar bir eğitim parçasını (bir kategori, modül, konu, kurs veya senaryo) bir kullanıcıya, ekibe veya tüm kuruma teslim tarihi ile bağlar. Aynı kayıtlar SARIF otomatik atama akışını da destekler. Tüm uç noktalar /api/public/v1/assignments altındadır.

Uç noktalar

MethodPathKapsamAmaç
GET/assignmentsassignments:readAtamaları toplam ilerleme ile listeler.
GET/assignments/{'{'}id{'}'}assignments:readKullanıcı başına ilerleme ile tek bir atama.
POST/assignmentsassignments:writeBir atama oluşturur. assignment.created tetikler.
PATCH/assignments/{'{'}id{'}'}assignments:writeTeslim tarihini, zorunluluk bayrağını, notu veya aktif durumu günceller.
DELETE/assignments/{'{'}id{'}'}assignments:writeDeaktive eder. İlerleme kayıtları korunur.

Atanan ve içerik terimleri

Her atama bir assigneeType + assigneeId çifti ve bir contentArea + targetType + targetId üçlüsü taşır. Geçerli değerler:

AlanGeçerli değerlertargetId / assigneeId anlamı
assigneeTypeuser, team, orguser ve team için assigneeId ilgili UUID'dir. org için id, kurum id'nizdir.
contentAreapractice, learnpractice uygulamalı zorluklar; learn kurslar ve senaryolar.
practice için targetTypecategory, module, topicDize slug, örn. web, owasp-top-10, sql-injection.
learn için targetTypecourse, scenarioDize slug, örn. owasp-top-10-2025, phishing-call-2025.
Her iki alan için targetTypecustom-courseBir özel kursun UUID'si (Özel Kurslar'e bakın). Kursun öğeleri hangi pratik konularının ve/veya öğrenme senaryolarının tamamlanma için izleneceğini belirler.

Atamaları listele

Kurumdaki her atamayı (aktif ve aktif olmayan) denormalize edilmiş ilerleme toplamlarıyla döner.

GET /api/public/v1/assignments
Authorization: Bearer scs_live_…

Yanıt

[
  {
    "id": "d7c8a1b2-3e45-4f67-89ab-cd0123456789",
    "contentArea": "practice",
    "assigneeType": "team",
    "assigneeId": "4f8d3e2a-71cb-4d09-9ad7-5b8c7e1f0a32",
    "assigneeName": "Payments",
    "targetType": "topic",
    "targetId": "sql-injection",
    "targetTitle": "SQL Injection",
    "deadline": "2026-06-12T23:59:59Z",
    "isMandatory": true,
    "isActive": true,
    "isOverdue": false,
    "avgProgress": 42.5,
    "totalAssignees": 12,
    "completedAssignees": 3,
    "createdAt": "2026-05-29T08:00:00Z"
  }
]

Örnek

curl -sS -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/assignments

Atamayı al

Liste girdisiyle aynı alanlara ek olarak atamayı oluşturanın görünen adını, isteğe bağlı notu ve uyumluluk raporlarına uygun kullanıcı başına ilerleme dizisini döner.

GET /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…

Yanıt

{
  "id": "d7c8a1b2-3e45-4f67-89ab-cd0123456789",
  "contentArea": "practice",
  "assigneeType": "team",
  "assigneeId": "4f8d3e2a-71cb-4d09-9ad7-5b8c7e1f0a32",
  "assigneeName": "Payments",
  "targetType": "topic",
  "targetId": "sql-injection",
  "targetTitle": "SQL Injection",
  "deadline": "2026-06-12T23:59:59Z",
  "isMandatory": true,
  "isActive": true,
  "isOverdue": false,
  "note": "Follow-up to the May audit finding.",
  "assignedByName": "API Key: CI Ingestion",
  "avgProgress": 42.5,
  "totalAssignees": 12,
  "completedAssignees": 3,
  "createdAt": "2026-05-29T08:00:00Z",
  "userProgress": [
    {
      "userId": "b1a4d7c2-9e58-4f3a-83cd-2c6f1a90e7b4",
      "name": "Jane Smith",
      "email": "jane.smith@acme.com",
      "totalChallenges": 8,
      "completedChallenges": 8,
      "progressPercent": 100,
      "completedAt": "2026-06-04T10:18:42Z",
      "isOverdue": false
    }
  ]
}

Örnek

curl -sS -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/assignments/d7c8a1b2-3e45-4f67-89ab-cd0123456789

Atama oluştur

Atamayı oluşturur ve assignment.created tetikler. Atanan bir ekip veya kurum ise, kullanıcı başına ilerleme satırları oluşturma sırasında her üye için materyalize edilir; böylece GET /assignments/{id} yanıtı hemen tamdır.

POST /api/public/v1/assignments
Authorization: Bearer scs_live_…
Content-Type: application/json

İstek gövdesi

AlanTürZorunluAnlam
assigneeTypestringevetuser, team veya org.
assigneeIduuidevetTüre bağlı olarak kullanıcı id'si, ekip id'si veya kurum id'si.
contentAreastringevetpractice veya learn.
targetTypestringevetYukarıdaki terim tablosuna bakın.
targetIdstringevetKategorinin, modülün, konunun, kursun veya senaryonun slug veya id'si.
deadlineISO 8601evetUTC'de bitiş tarihi ve saati.
isMandatoryboolhayırVarsayılan true. Zorunlu olmayan atamalar uyumluluk raporlarını engellemez.
notestringhayırAtanan kişiye gösterge panelinde gösterilen serbest metin.

Yanıt

{
  "id": "d7c8a1b2-3e45-4f67-89ab-cd0123456789",
  "contentArea": "practice",
  "assigneeType": "team",
  "assigneeId": "4f8d3e2a-71cb-4d09-9ad7-5b8c7e1f0a32",
  "assigneeName": "Payments",
  "targetType": "topic",
  "targetId": "sql-injection",
  "targetTitle": "SQL Injection",
  "deadline": "2026-06-12T23:59:59Z",
  "isMandatory": true,
  "isActive": true,
  "isOverdue": false,
  "avgProgress": 0,
  "totalAssignees": 12,
  "completedAssignees": 0,
  "createdAt": "2026-05-29T08:00:00Z"
}

Örnek

curl -sS -X POST \
  -H "Authorization: Bearer $SCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assigneeType": "team",
    "assigneeId": "4f8d3e2a-71cb-4d09-9ad7-5b8c7e1f0a32",
    "contentArea": "practice",
    "targetType": "topic",
    "targetId": "sql-injection",
    "deadline": "2026-06-12T23:59:59Z",
    "isMandatory": true,
    "note": "Follow-up to the May audit finding."
  }' \
  https://api.limeplate.com/api/public/v1/assignments

Atamayı güncelle

deadline, isMandatory, note ve isActive alanlarının herhangi bir alt kümesi gönderilebilir. Atlanan alanlar olduğu gibi bırakılır. DELETE'e bozmadan eşdeğer olarak isActive: false kullanın.

PATCH /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…
Content-Type: application/json

İstek gövdesi

AlanTürAnlam
deadlineISO 8601Yeni bitiş tarihi.
isMandatoryboolZorunluluk bayrağını değiştirir.
notestringNotu değiştirir. Temizlemek için boş dize gönderin.
isActiveboolİlerlemeyi etkilemeden etkinleştirir veya devre dışı bırakır.

Yanıt

{
  "message": "Assignment updated"
}

Örnek

curl -sS -X PATCH \
  -H "Authorization: Bearer $SCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "deadline": "2026-06-26T23:59:59Z",
    "note": "Extended after sprint planning."
  }' \
  https://api.limeplate.com/api/public/v1/assignments/d7c8a1b2-3e45-4f67-89ab-cd0123456789

Atamayı deaktive et

isActive alanını false yapar. Atama, atananın "Atamalarım" görünümünde artık görünmez ve uyumluluk metriklerine katkıda bulunmayı durdurur ama geçmiş ilerleme kayıtları korunur; böylece geçmiş dönem raporları yine çözümlenir.

DELETE /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…

Yanıt

{
  "message": "Assignment deactivated"
}

Örnek

curl -sS -X DELETE \
  -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/assignments/d7c8a1b2-3e45-4f67-89ab-cd0123456789

Webhook olayları

POST /assignments üzerinden bir atama oluşturmak assignment.created olayını bir kez tetikler. Atanan herhangi tek bir kişi hedefte %100 ilerlemeye ulaştığında, o kullanıcı için assignment.completed tetiklenir — ekip ve kurum atamaları için bu, %100'e ulaşan her üye için bir olay demektir, tüm atama için tek bir olay değil. Her iki olay da atama id'sini ve atananın kimliğini içerir. Abone olun ve imzaları /docs/api/webhooks üzerinden doğrulayın.