API

API для сервисов UNIT

Для сервисов, которые держат у себя копию аккаунтов UNIT и меняют их: так работают школа и лаборатория. Доступно только приложениям с правом accounts — его выдаёт администратор UNIT.

Это не для обычных приложенийAPI отдаёт хеши паролей и позволяет заводить и менять аккаунты. Если вам нужно только узнать, кто вошёл, — используйте обычный вход.

Авторизация

Запросы — от имени сервиса, а не человека: заголовок Authorization: Basic base64(client_id:client_secret). У приложения должно быть право accounts, оно должно быть активным и с секретом. Иначе — 401 invalid_client.

Как устроена синхронизация

  • Источник правды — UNIT ID. Сервис забирает аккаунты к себе периодически (школа — раз в 2 минуты) и сразу, если вход у него не удался: человека могли только что завести.
  • Доступ к сервису — тег. У каждого сервиса UNIT свой тег (школа, лаборатория…), см. /api/services. Тега нет или аккаунт отключён — входа в сервис нет.
  • Свои изменения — сначала в UNIT ID. Сервис меняет имя, почту, пароль или теги у себя, только если UNIT ID принял изменение. Иначе копии разъедутся.
  • 2FA. Если у аккаунта включена двухфакторная защита (mfa: true), по одному паролю сервис пускать не должен — только через вход UNIT ID.

Список аккаунтов

GET/api/service/accounts?tag=школа
curl -u "CLIENT_ID:CLIENT_SECRET" "https://auth.labunit.ru/api/service/accounts?tag=%D1%88%D0%BA%D0%BE%D0%BB%D0%B0"

{
  "accounts": [
    {"id": "s-4kq9tz", "name": "Анна Смирнова", "email": "anna@labunit.ru",
     "tags": ["школа", "ученик"], "roles": ["student"], "disabled": false, "mfa": false,
     "password": "pbkdf2$600000$…$…", "updated_at": "2026-10-12T10:41:07"}
  ]
}
ПолеОписание
tag (параметр)Только аккаунты с этим тегом. Без него — все.
passwordХеш PBKDF2-SHA256 в формате pbkdf2$итерации$соль$хеш — чтобы сервис мог проверять пароль сам. Сам пароль не передаётся никогда.
rolesРоли, выведенные из тегов: администратор → admin, наставник → teacher, ученик → student.
disabled, mfaАккаунт отключён; включена 2FA.

Завести аккаунт

POST/api/service/accounts
curl -u "CLIENT_ID:CLIENT_SECRET" -H "Content-Type: application/json" \
  -d '{"name": "Анна Смирнова", "email": "anna@labunit.ru",
       "password": "pbkdf2$600000$…$…", "tags": ["школа", "ученик"]}' \
  https://auth.labunit.ru/api/service/accounts

Если человек с такой почтой уже есть в UNIT, новый аккаунт не создаётся: ему добавляются ваши теги, пароль не меняется, в ответе "existed": true и его id — используйте его. Новый аккаунт — ответ 201, "existed": false. Можно передать свой id, чтобы сохранить идентификатор из вашей базы.

Изменить аккаунт

POST/api/service/accounts/<id>
curl -u "CLIENT_ID:CLIENT_SECRET" -H "Content-Type: application/json" \
  -d '{"tags_add": ["наставник"], "tags_remove": ["ученик"]}' \
  https://auth.labunit.ru/api/service/accounts/s-4kq9tz
ПолеЧто меняет
name, emailИмя и почту (почта должна быть свободна).
passwordХеш пароля в формате PBKDF2, как в списке.
tags_add, tags_removeДобавить и снять теги. Удаление человека из сервиса — снять тег сервиса: сам аккаунт UNIT остаётся, он может быть нужен другим сервисам.
disabledtrue — отключить аккаунт во всех сервисах.
СтатусКогда
200Изменено, в ответе — аккаунт целиком.
400Ошибка в данных (например, почта занята) — текст в error.
404Аккаунта с таким id нет — заведите его.
UNIT · UNIT ID · вопросы по интеграции — администратору UNIT