Перейти к основному содержимому

Карта API

Зачем нужно

Документ задаёт карту API домена identity: группы эндпоинтов, правила контрактов, ошибки, пагинацию, идемпотентность, security headers и связь с OpenAPI.

Детальные поля запросов описываются в профильных документах, но все endpoints должны следовать правилам этой карты.

Базовые правила

  • Обычные identity API endpoints начинаются с /api/v2/identity.
  • Исключение: OIDC discovery и OAuth endpoints (/.well-known/*, /oauth/*), которые живут на корне домена.
  • Ответы используют единый envelope.
  • Ошибки используют единый формат.
  • Все authenticated endpoints требуют JWT access token.
  • Admin endpoints требуют RBAC permission на сервере.
  • Изменяющие операции пишут audit, если меняют безопасность, доступ, роли, OAuth clients, plugins или platform settings.
  • Все списки поддерживают pagination и фильтры, если могут вырасти.
  • Все опасные операции требуют явного confirmation или re-auth.

Response envelope

{
"data": {},
"meta": {
"requestId": "uuid",
"page": 1,
"perPage": 25,
"total": 100,
"cursor": null
}
}

Ошибка

{
"error": {
"code": "identity.auth.invalid_credentials",
"message": "Неверные данные входа",
"details": {}
},
"meta": {
"requestId": "uuid"
}
}

Сообщение ошибки для пользователя может быть нейтральным. Техническая причина хранится в logs/audit без раскрытия секретов.

Auth API

МетодПутьНазначение
POST/api/v2/identity/auth/registerрегистрация
POST/api/v2/identity/auth/flow/startстарт auth flow
POST/api/v2/identity/auth/flow/nextследующий шаг auth flow
POST/api/v2/identity/auth/loginпростой вход, если включён как сокращение auth flow
POST/api/v2/identity/auth/refreshrefresh token rotation
POST/api/v2/identity/auth/logoutlogout текущей сессии
POST/api/v2/identity/auth/logout-alllogout всех сессий
POST/api/v2/identity/auth/password/reset/startстарт reset password
POST/api/v2/identity/auth/password/reset/confirmподтверждение reset password
POST/api/v2/identity/auth/contacts/verify/startотправить код подтверждения контакта
POST/api/v2/identity/auth/contacts/verify/confirmподтвердить контакт

Profile and users API

МетодПутьНазначение
GET/api/v2/identity/meтекущий пользователь
PATCH/api/v2/identity/me/profileобновить профиль
GET/api/v2/identity/me/sessionsмои сессии
DELETE/api/v2/identity/me/sessions/{id}отозвать сессию
GET/api/v2/identity/admin/usersсписок пользователей
POST/api/v2/identity/admin/usersсоздать пользователя
GET/api/v2/identity/admin/users/{id}карточка пользователя
PATCH/api/v2/identity/admin/users/{id}изменить пользователя
POST/api/v2/identity/admin/users/{id}/blockзаблокировать
POST/api/v2/identity/admin/users/{id}/unblockразблокировать

RBAC API

МетодПутьНазначение
GET/api/v2/identity/admin/rolesсписок ролей
POST/api/v2/identity/admin/rolesсоздать кастомную роль
PATCH/api/v2/identity/admin/roles/{id}изменить роль
GET/api/v2/identity/admin/permissionsсписок permissions
POST/api/v2/identity/admin/users/{id}/rolesназначить роль
DELETE/api/v2/identity/admin/users/{id}/roles/{assignmentId}снять роль
GET/api/v2/identity/me/permissionseffective permissions текущего пользователя

Family API

МетодПутьНазначение
GET/api/v2/identity/familiesсемьи пользователя
POST/api/v2/identity/familiesсоздать семью
GET/api/v2/identity/families/{id}детали семьи
PATCH/api/v2/identity/families/{id}изменить базовые настройки семьи
POST/api/v2/identity/families/{id}/student-profilesдобавить student_profile ребёнка
PATCH/api/v2/identity/families/{id}/student-profiles/{studentProfileId}изменить семейно-управляемые поля ребёнка
POST/api/v2/identity/families/{id}/student-profiles/{studentProfileId}/link-userпривязать или создать user ребёнка
POST/api/v2/identity/families/{id}/invitationsпригласить взрослого
POST/api/v2/identity/family-invitation-tokens/{token}/acceptпринять family invitation
POST/api/v2/identity/families/{id}/delegated-sessionsначать delegated session
DELETE/api/v2/identity/families/{id}/delegated-sessions/{sessionId}завершить delegated session
POST/api/v2/identity/families/{id}/student-profiles/{studentProfileId}/device-authorizationsсоздать запрос входа ребёнка на устройстве
POST/api/v2/identity/families/{id}/device-authorizations/{authorizationId}/approveвзрослый подтверждает запрос
POST/api/v2/identity/families/{id}/device-authorizations/{authorizationId}/completeустройство ребёнка завершает вход
POST/api/v2/identity/families/{id}/device-authorizations/{authorizationId}/revokeотозвать запрос

Self-service удаление семьи, выход взрослого, удаление adult member, перенос и отвязка ребёнка не входят в пользовательский MVP Family API. Эти операции выполняются вручную администраторами и должны проектироваться отдельно.

Organizations API

МетодПутьНазначение
GET/api/v2/identity/organization-references/searchпоиск справочных и уже созданных организаций
POST/api/v2/identity/admin/organization-referencesсоздать справочную организацию
PATCH/api/v2/identity/admin/organization-references/{id}изменить справочную организацию
GET/api/v2/identity/organizationsорганизации пользователя
POST/api/v2/identity/organizationsсоздать организацию
GET/api/v2/identity/organizations/{id}детали
PATCH/api/v2/identity/organizations/{id}изменить
DELETE/api/v2/identity/organizations/{id}архивировать, не hard delete
POST/api/v2/identity/organizations/{id}/membership-requestsподать заявку на вступление
GET/api/v2/identity/organizations/{id}/membership-requestsсписок заявок на вступление
POST/api/v2/identity/organizations/{id}/membership-requests/{requestId}/approveподтвердить заявку
POST/api/v2/identity/organizations/{id}/membership-requests/{requestId}/rejectотклонить заявку
POST/api/v2/identity/organizations/{id}/teamsсоздать команду
POST/api/v2/identity/organizations/{id}/invitationsприглашение
GET/api/v2/identity/organizations/{id}/invitationsприглашения организации
POST/api/v2/identity/organization-invitation-tokens/{token}/acceptпринять приглашение по token
POST/api/v2/identity/organization-invitation-tokens/{token}/rejectотказаться от приглашения по token
POST/api/v2/identity/organizations/{id}/invitations/{invitationId}/revokeотозвать приглашение
POST/api/v2/identity/organizations/{id}/ownership-claimsподать заявку на владение
GET/api/v2/identity/admin/organization-ownership-claimsсписок заявок на владение
POST/api/v2/identity/admin/organization-ownership-claims/{id}/approveодобрить заявку на владение
POST/api/v2/identity/admin/organization-ownership-claims/{id}/rejectотклонить заявку на владение
POST/api/v2/identity/admin/organization-ownership-claims/{id}/request-more-infoзапросить данные
POST/api/v2/identity/organizations/{id}/ownership-transfersсоздать передачу владения
POST/api/v2/identity/organization-ownership-transfers/{token}/acceptпринять передачу владения
POST/api/v2/identity/organizations/{id}/ownership-transfers/{transferId}/cancelотменить передачу
GET/api/v2/identity/organizations/{id}/studentsученики организации
POST/api/v2/identity/organizations/{id}/studentsсоздать ученика организации
PATCH/api/v2/identity/organizations/{id}/students/{studentId}изменить ученика организации
DELETE/api/v2/identity/organizations/{id}/students/{studentId}архивировать ученика организации
GET/api/v2/identity/admin/organizationsadmin list организаций
GET/api/v2/identity/admin/organizations/{id}admin карточка организации
POST/api/v2/identity/admin/organization-mergesсоздать merge plan
POST/api/v2/identity/admin/organization-merges/{id}/confirmподтвердить merge plan после impact preview
POST/api/v2/identity/admin/organization-merges/{id}/completeвыполнить merge

OAuth/OIDC API

МетодПутьНазначение
GET/.well-known/openid-configurationOIDC discovery
GET/.well-known/jwks.jsonpublic keys
GET/oauth/authorizeauthorization endpoint
POST/oauth/tokentoken endpoint
GET/oauth/userinfouserinfo
POST/oauth/introspecttoken introspection
POST/oauth/revoketoken revocation
GET/oauth/end_sessionRP-initiated logout
GET/api/v2/identity/admin/oauth/clientsсписок clients
POST/api/v2/identity/admin/oauth/clientsсоздать client
PATCH/api/v2/identity/admin/oauth/clients/{id}изменить client

Notifications, events, audit

МетодПутьНазначение
GET/api/v2/platform/notificationsin-app уведомления
GET/api/v2/platform/notifications/unread-countсчётчик непрочитанных
PATCH/api/v2/platform/notifications/{id}/readотметить прочитанным
POST/api/v2/platform/notifications/read-allотметить все прочитанными
DELETE/api/v2/platform/notifications/{id}удалить уведомление
DELETE/api/v2/platform/notifications/readудалить все прочитанные
GET/api/v2/platform/notifications/settingsнастройки пользователя
PATCH/api/v2/platform/notifications/settings/{ruleId}изменить настройку правила
GET/api/v2/platform/admin/notifications/rulesправила уведомлений
POST/api/v2/platform/admin/notifications/rulesсоздать правило уведомлений
PATCH/api/v2/platform/admin/notifications/rules/{id}изменить правило уведомлений
DELETE/api/v2/platform/admin/notifications/rules/{id}удалить правило уведомлений
GET/api/v2/platform/admin/notifications/templatesшаблоны уведомлений
PATCH/api/v2/platform/admin/notifications/templates/{id}изменить шаблон уведомлений
GET/api/v2/identity/admin/audit-logsaudit logs
GET/api/v2/identity/admin/eventsevent logs

Platform, plugins, transports

Эти endpoints platform-owned и временно обслуживаются identity-api как bootstrap host. Canonical owner — platform по ADR-035.

МетодПутьНазначение
GET/api/v2/platform/settings/publicпубличные настройки
GET/api/v2/platform/navigationменю текущего пользователя
GET/api/v2/platform/pagesстраницы текущего пользователя
GET/api/v2/platform/admin/settingssettings
PATCH/api/v2/platform/admin/settingsизменить settings
GET/api/v2/platform/admin/pluginsсписок plugins
POST/api/v2/platform/admin/plugins/installустановить plugin
POST/api/v2/platform/admin/plugins/{id}/enableвключить
POST/api/v2/platform/admin/plugins/{id}/disableвыключить
DELETE/api/v2/platform/admin/plugins/{id}удалить
GET/api/v2/platform/admin/transportstransports

Security requirements

  • x-request-id возвращается в каждом ответе.
  • Cookies, если используются, должны быть HttpOnly, Secure, SameSite.
  • OAuth endpoints имеют отдельные rate limits.
  • Auth endpoints имеют rate limits по IP, identifier и user.
  • Admin endpoints требуют CSRF protection, если используются cookie sessions.
  • File upload endpoints проверяют размер, MIME type, extension и storage policy.

Идемпотентность

Идемпотентность нужна для:

  • отправки verification code;
  • принятия invitation;
  • создания OAuth client;
  • установки plugin;
  • изменения role assignment;
  • повторных callback от provider.

Для повторяемых команд используется Idempotency-Key, если операция может быть вызвана клиентом повторно из-за сетевой ошибки.

Готовность

  • все endpoints имеют owner document;
  • OpenAPI генерируется из контроллеров;
  • ошибки имеют коды;
  • audit покрывает security/business changes;
  • rate limits заданы для auth, OAuth, invitations, plugins и admin actions;
  • API можно реализовать без неописанных групп endpoints.