Документация/API и Webhook'и/Сертификаты

Сертификаты

SecureCodingHub автоматически выпускает сертификат, когда пользователь заканчивает каждый учебный сценарий и каждую практическую задачу в целой категории (Web, API, Mobile, Client). Эти эндпоинты раскрывают выпущенные сертификаты и поиск публичной верификации. Требует области certificates:read.

Конечные точки

МетодПутьОбласть действияНазначение
GET/certificates/users/{'{'}userId{'}'}certificates:readСтатус сертификата для каждой категории для одного пользователя.
GET/certificates/verify/{'{'}certNumber{'}'}certificates:readВерифицировать сертификат по его публичному номеру.

Все пути относительны к https://api.limeplate.com/api/public/v1.

Как выпускаются сертификаты

Выпуск полностью автоматический — ручного эндпоинта «выдать» нет. Правила:

  • Один сертификат на категорию на пользователя. Категории: web, api, mobile и client.
  • Сертификат категории выпускается в момент, когда пользователь завершил все учебные сценарии и все практические задачи в этой категории.
  • Каждому сертификату присваивается постоянный, публично-разделяемый certificateNumber.
  • Выпуск срабатывает webhook-событие certificate.issued. См. Webhook'и для полезной нагрузки.

Повторное завершение контента после выпуска не генерирует новый сертификат; исходный номер постоянен.

Список статуса сертификата для пользователя

Возвращает одну запись на категорию. Записи, где certificateId равно null, представляют категории, которые пользователь начал, но ещё не закончил — удобно для рендеринга UI «Вам осталось 18 из 22 задач до Вашего Web-сертификата».

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 всё ещё требуются при его вызове. Если Вы хотите действительно публичную верификацию без авторизации, ссылайтесь на URL верификации, размещённый на SecureCodingHub: 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/талант-систему в момент их выпуска — вместо опроса эндпоинта пользователя — подписывайтесь на webhook certificate.issued. Полезная нагрузка webhook'а включает userId, certificateNumber, categoryId и issuedAt, зеркаля ответ верификации. См. Webhook'и.