証明書
SecureCodingHubは、ユーザーがカテゴリ全体 (Web、API、Mobile、Client) のすべての学習シナリオおよびすべての練習チャレンジを完了したときに、証明書を自動発行します。これらのエンドポイントは発行済み証明書とパブリック形式の検証ルックアップを公開します。certificates:readスコープが必要です。
エンドポイント
| メソッド | パス | スコープ | 目的 |
|---|---|---|---|
GET | /certificates/users/{'{'}userId{'}'} | certificates:read | 1人のユーザーの、すべてのカテゴリの証明書ステータス。 |
GET | /certificates/verify/{'{'}certNumber{'}'} | certificates:read | パブリック番号で証明書を検証します。 |
すべてのパスはhttps://api.limeplate.com/api/public/v1相対です。
証明書の発行方法
発行は完全に自動です — 手動の「付与」エンドポイントはありません。ルール:
- ユーザーごとにカテゴリにつき1つの証明書。カテゴリは
web、api、mobile、clientです。 - カテゴリ証明書は、ユーザーがそのカテゴリのすべての学習シナリオとすべての練習チャレンジを完了した瞬間に発行されます。
- 各証明書には、永続的でパブリックに共有可能な
certificateNumberが割り当てられます。 - 発行は
certificate.issuedWebhookイベントを発火します。ペイロードについてはWebhookを参照してください。
発行後にコンテンツを再完了しても、新しい証明書は生成されません。元の番号は永続的です。
ユーザーの証明書ステータスをリスト表示
カテゴリごとに1エントリを返します。certificateIdがnullのエントリは、ユーザーが開始したがまだ完了していないカテゴリを表します — 「Web証明書まで22チャレンジ中18チャレンジです」のようなUIをレンダリングするのに便利です。
GET /api/public/v1/certificates/users/{userId}
Authorization: Bearer scs_live_…レスポンス
[
{
"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
}
]isCompleteは「practiceCompleted == practiceTotal && learnCompleted == learnTotal」を反映します。practiceTotalとlearnTotalはライブカウントです — カテゴリに新しいコンテンツを追加してもすでに発行済みの証明書は無効化されませんが、進行中のユーザーの分母は上方に動きます。
例
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/certificates/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192証明書を検証
パブリック番号で証明書を検索し、保有者、組織、カテゴリを返します。これを使用して、キャリアサイトの「証明書を検証」ページをバックアップしたり、採用時に候補者の主張を検証してください。
GET /api/public/v1/certificates/verify/{certNumber}
Authorization: Bearer scs_live_…エンドポイントはパブリック検証ルックアップのように動作しますが、呼び出し時にもAPIキーとcertificates:readスコープが必要です。認証なしで真にパブリックな検証が必要な場合は、代わりにSecureCodingHubがホストする検証URL https://www.securecodinghub.com/verify/{'{'}certNumber{'}'}にリンクしてください。
レスポンス
{
"certificateNumber": "SCH-2026-WEB-000123",
"userName": "Jane Smith",
"organizationName": "Acme Corp",
"categoryId": "web",
"categoryTitle": "Web Application Security",
"issuedAt": "2026-05-12T08:41:22Z"
}その番号の証明書が存在しない場合は404 certificate_not_foundを返します。取り消し済みまたはテストフィクスチャの証明書番号も404を返します。
例
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/certificates/verify/SCH-2026-WEB-000123証明書イベントの受信
ユーザーエンドポイントをポーリングするのではなく、証明書が発行された瞬間にHR/タレントシステムにプッシュしたい場合は、certificate.issued Webhookを購読してください。WebhookペイロードにはuserId、certificateNumber、categoryId、issuedAtが含まれ、検証レスポンスを反映します。Webhookを参照してください。