Certificats
SecureCodingHub émet automatiquement un certificat lorsqu'un utilisateur termine chaque scénario d'apprentissage et chaque challenge de pratique dans une catégorie entière (Web, API, Mobile, Client). Ces points de terminaison exposent les certificats émis et une recherche de vérification de style public. Nécessite la portée certificates:read.
Points de terminaison
| Méthode | Chemin | Portée | Objectif |
|---|---|---|---|
GET | /certificates/users/{'{'}userId{'}'} | certificates:read | Statut de certificat pour chaque catégorie, pour un utilisateur. |
GET | /certificates/verify/{'{'}certNumber{'}'} | certificates:read | Vérifier un certificat par son numéro public. |
Tous les chemins sont relatifs à https://api.limeplate.com/api/public/v1.
Comment les certificats sont émis
L'émission est entièrement automatique — il n'y a pas de point de terminaison « accorder » manuel. Les règles :
- Un certificat par catégorie par utilisateur. Les catégories sont
web,api,mobileetclient. - Un certificat de catégorie est émis au moment où un utilisateur a terminé tous les scénarios d'apprentissage et tous les challenges de pratique de cette catégorie.
- Chaque certificat se voit attribuer un
certificateNumberpermanent, partageable publiquement. - L'émission déclenche un événement webhook
certificate.issued. Voir Webhooks pour la charge utile.
Refaire le contenu après l'émission ne génère pas un nouveau certificat ; le numéro d'origine est permanent.
Lister le statut des certificats pour un utilisateur
Renvoie une entrée par catégorie. Les entrées où certificateId est null représentent les catégories que l'utilisateur a commencées mais pas encore terminées — pratique pour rendre une interface « vous êtes à 18 des 22 challenges de votre certificat Web ».
GET /api/public/v1/certificates/users/{userId}
Authorization: Bearer scs_live_…Réponse
[
{
"categoryId": "web",
"categoryTitle": "Web Application Security",
"certificateId": "7e4c9d09-86ca-4125-bbd8-7fae54c8f654",
"certificateNumber": "SCH-2026-WEB-000123",
"issuedAt": "2026-05-12T08:41:22Z",
"practiceTotal": 75,
"practiceCompleted": 75,
"learnTotal": 22,
"learnCompleted": 22,
"isComplete": true
},
{
"categoryId": "api",
"categoryTitle": "API Security",
"certificateId": null,
"certificateNumber": null,
"issuedAt": null,
"practiceTotal": 60,
"practiceCompleted": 42,
"learnTotal": 18,
"learnCompleted": 14,
"isComplete": false
},
{
"categoryId": "mobile",
"categoryTitle": "Mobile Application Security",
"certificateId": null,
"certificateNumber": null,
"issuedAt": null,
"practiceTotal": 50,
"practiceCompleted": 0,
"learnTotal": 15,
"learnCompleted": 0,
"isComplete": false
},
{
"categoryId": "client",
"categoryTitle": "Client-Side Security",
"certificateId": null,
"certificateNumber": null,
"issuedAt": null,
"practiceTotal": 40,
"practiceCompleted": 6,
"learnTotal": 12,
"learnCompleted": 2,
"isComplete": false
}
]isCompletereflète «practiceCompleted == practiceTotal && learnCompleted == learnTotal».practiceTotaletlearnTotalsont des comptes en direct — ajouter du nouveau contenu à une catégorie ne invalide pas les certificats déjà émis, mais cela déplacera les dénominateurs d'un utilisateur en cours vers le haut.
Exemple
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/certificates/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192Vérifier un certificat
Recherche un certificat par son numéro public et renvoie le titulaire, l'organisation et la catégorie. Utilisez ceci pour soutenir une page « Vérifier votre certificat » sur votre site carrière, ou pour valider la revendication d'un candidat lors d'une embauche.
GET /api/public/v1/certificates/verify/{certNumber}
Authorization: Bearer scs_live_…Bien que le point de terminaison se comporte comme une recherche de vérification publique, la clé API et la portée certificates:read sont toujours requises lors de l'appel. Si vous voulez une vérification vraiment publique sans authentification, liez vers l'URL de vérification hébergée SecureCodingHub à la place : https://www.securecodinghub.com/verify/{'{'}certNumber{'}'}.
Réponse
{
"certificateNumber": "SCH-2026-WEB-000123",
"userName": "Jane Smith",
"organizationName": "Acme Corp",
"categoryId": "web",
"categoryTitle": "Web Application Security",
"issuedAt": "2026-05-12T08:41:22Z"
}Renvoie 404 certificate_not_found si aucun certificat avec ce numéro n'existe. Les numéros de certificats révoqués ou de fixture de test renvoient également 404.
Exemple
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/certificates/verify/SCH-2026-WEB-000123Réception des événements de certificat
Si vous voulez pousser les certificats dans un système RH/talent au moment où ils sont émis — plutôt que d'interroger le point de terminaison utilisateur — abonnez-vous au webhook certificate.issued. La charge utile webhook inclut userId, certificateNumber, categoryId et issuedAt, reflétant la réponse de vérification. Voir Webhooks.