Affectations
Les affectations lient un élément de formation (une catégorie, module, sujet, cours ou scénario) à un utilisateur, équipe ou à l'organisation entière avec une échéance. Les mêmes enregistrements sous-tendent le flux d'auto-attribution SARIF. Tous les points de terminaison se trouvent sous /api/public/v1/assignments.
Points de terminaison
| Méthode | Chemin | Portée | Objectif |
|---|---|---|---|
| GET | /assignments | assignments:read | Lister les affectations avec la progression agrégée. |
| GET | /assignments/{'{'}id{'}'} | assignments:read | Affectation unique plus progression par utilisateur. |
| POST | /assignments | assignments:write | Créer une affectation. Déclenche assignment.created. |
| PATCH | /assignments/{'{'}id{'}'} | assignments:write | Mettre à jour l'échéance, l'indicateur obligatoire, la note ou l'état actif. |
| DELETE | /assignments/{'{'}id{'}'} | assignments:write | Désactiver. Les enregistrements de progression sont préservés. |
Vocabulaire destinataire et contenu
Chaque affectation porte une paire assigneeType + assigneeId, et un triplet contentArea + targetType + targetId. Les valeurs légales :
| Champ | Valeurs légales | Signification de targetId / assigneeId |
|---|---|---|
assigneeType | user, team, org | Pour user et team, le assigneeId est l'UUID correspondant. Pour org, l'id est l'id de votre organisation. |
contentArea | practice, learn | practice est des challenges pratiques ; learn est des cours et scénarios. |
targetType pour practice | category, module, topic | Slug de chaîne, par exemple web, owasp-top-10, sql-injection. |
targetType pour learn | course, scenario | Slug de chaîne, par exemple owasp-top-10-2025, phishing-call-2025. |
targetType pour l'une ou l'autre zone | custom-course | UUID d'un cours personnalisé (voir Cours personnalisés). Les éléments du cours dictent quels sujets de pratique et/ou scénarios d'apprentissage sont suivis pour la complétion. |
Lister les affectations
Renvoie chaque affectation de l'organisation, active et inactive, avec des agrégats de progression dénormalisés.
GET /api/public/v1/assignments
Authorization: Bearer scs_live_…Réponse
[
{
"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"
}
]Exemple
curl -sS -H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/assignmentsRécupérer une affectation
Mêmes champs que l'entrée de liste, plus le nom d'affichage de l'attribuant, la note optionnelle et un tableau de progression par utilisateur adapté aux rapports de conformité.
GET /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…Réponse
{
"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
}
]
}Exemple
curl -sS -H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/assignments/d7c8a1b2-3e45-4f67-89ab-cd0123456789Créer une affectation
Crée l'affectation et déclenche assignment.created. Si le destinataire est une équipe ou l'organisation, les lignes de progression par utilisateur sont matérialisées pour chaque membre au moment de la création, donc la réponse de GET /assignments/{id} est immédiatement complète.
POST /api/public/v1/assignments
Authorization: Bearer scs_live_…
Content-Type: application/jsonCorps de requête
| Champ | Type | Requis | Signification |
|---|---|---|---|
assigneeType | string | oui | user, team ou org. |
assigneeId | uuid | oui | Id utilisateur, id équipe ou id organisation selon le type. |
contentArea | string | oui | practice ou learn. |
targetType | string | oui | Voir le tableau de vocabulaire ci-dessus. |
targetId | string | oui | Slug ou id de la catégorie, module, sujet, cours ou scénario. |
deadline | ISO 8601 | oui | Date et heure d'échéance en UTC. |
isMandatory | bool | non | Par défaut true. Les affectations non obligatoires ne bloquent pas les rapports de conformité. |
note | string | non | Texte libre affiché au destinataire dans le tableau de bord. |
Réponse
{
"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"
}Exemple
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/assignmentsMettre à jour une affectation
Tout sous-ensemble de deadline, isMandatory, note et isActive peut être envoyé. Les champs omis sont laissés tels quels. Utilisez isActive: false comme équivalent non destructif à DELETE.
PATCH /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…
Content-Type: application/jsonCorps de requête
| Champ | Type | Signification |
|---|---|---|
deadline | ISO 8601 | Nouvelle date d'échéance. |
isMandatory | bool | Basculer l'indicateur obligatoire. |
note | string | Remplacer la note. Envoyez une chaîne vide pour effacer. |
isActive | bool | Activer ou désactiver sans affecter la progression. |
Réponse
{
"message": "Assignment updated"
}Exemple
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-cd0123456789Désactiver une affectation
Définit isActive à false. L'affectation n'apparaît plus dans la vue « Mes affectations » du destinataire et cesse de contribuer aux métriques de conformité, mais les enregistrements de progression historiques sont préservés pour que les rapports pour les périodes passées résolvent toujours.
DELETE /api/public/v1/assignments/{assignmentId}
Authorization: Bearer scs_live_…Réponse
{
"message": "Assignment deactivated"
}Exemple
curl -sS -X DELETE \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/assignments/d7c8a1b2-3e45-4f67-89ab-cd0123456789Événements webhook
Créer une affectation via POST /assignments déclenche assignment.created une fois. Lorsqu'un destinataire unique atteint 100 % de progression sur la cible sous-jacente, assignment.completed se déclenche pour cet utilisateur — pour les affectations d'équipe et d'organisation, cela signifie un événement par membre atteignant 100 %, non un événement pour l'affectation entière. Les deux événements incluent l'id d'affectation et l'identité du destinataire. Abonnez-vous et vérifiez les signatures via /docs/api/webhooks.