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 остаётся, он может быть нужен другим сервисам. |
disabled | true — отключить аккаунт во всех сервисах. |
| Статус | Когда |
|---|---|
200 | Изменено, в ответе — аккаунт целиком. |
400 | Ошибка в данных (например, почта занята) — текст в error. |
404 | Аккаунта с таким id нет — заведите его. |