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
| Method | Path | Kapsam | Amaç |
|---|---|---|---|
| GET | /assignments | assignments:read | Atamaları toplam ilerleme ile listeler. |
| GET | /assignments/{'{'}id{'}'} | assignments:read | Kullanıcı başına ilerleme ile tek bir atama. |
| POST | /assignments | assignments:write | Bir atama oluşturur. assignment.created tetikler. |
| PATCH | /assignments/{'{'}id{'}'} | assignments:write | Teslim tarihini, zorunluluk bayrağını, notu veya aktif durumu günceller. |
| DELETE | /assignments/{'{'}id{'}'} | assignments:write | Deaktive 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:
| Alan | Geçerli değerler | targetId / assigneeId anlamı |
|---|---|---|
assigneeType | user, team, org | user ve team için assigneeId ilgili UUID'dir. org için id, kurum id'nizdir. |
contentArea | practice, learn | practice uygulamalı zorluklar; learn kurslar ve senaryolar. |
practice için targetType | category, module, topic | Dize slug, örn. web, owasp-top-10, sql-injection. |
learn için targetType | course, scenario | Dize slug, örn. owasp-top-10-2025, phishing-call-2025. |
Her iki alan için targetType | custom-course | Bir ö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/assignmentsAtamayı 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-cd0123456789Atama 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
| Alan | Tür | Zorunlu | Anlam |
|---|---|---|---|
assigneeType | string | evet | user, team veya org. |
assigneeId | uuid | evet | Türe bağlı olarak kullanıcı id'si, ekip id'si veya kurum id'si. |
contentArea | string | evet | practice veya learn. |
targetType | string | evet | Yukarıdaki terim tablosuna bakın. |
targetId | string | evet | Kategorinin, modülün, konunun, kursun veya senaryonun slug veya id'si. |
deadline | ISO 8601 | evet | UTC'de bitiş tarihi ve saati. |
isMandatory | bool | hayır | Varsayılan true. Zorunlu olmayan atamalar uyumluluk raporlarını engellemez. |
note | string | hayır | Atanan 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/assignmentsAtamayı 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
| Alan | Tür | Anlam |
|---|---|---|
deadline | ISO 8601 | Yeni bitiş tarihi. |
isMandatory | bool | Zorunluluk bayrağını değiştirir. |
note | string | Notu değiştirir. Temizlemek için boş dize gönderin. |
isActive | bool | İ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-cd0123456789Atamayı 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-cd0123456789Webhook 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.