Admin API: пользователи
Методы Admin API для команды: список и создание пользователей, роли, пароли, ограничения доступа и личные настройки создателя токена.
Через API доступны те же действия, что и в разделе панели Админ-панель → Команда: управление пользователями, их ролями, паролями и правами. Все 13 методов требуют токен с доступом Полный доступ (full). Авторизация описана на странице Admin API: обзор и авторизация, формат ответов и ошибок — на странице Формат запросов, ответов и ошибок.
Объект пользователя
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID пользователя |
workspace_id | строка, UUID | ID команды |
email | строка | Логин для входа в панель |
role | строка | Роль, одно из шести значений ниже |
manager_id | строка, UUID | ID тимлида, за которым закреплён сотрудник. Если тимлида нет, поля в ответе нет |
created_at | строка, дата RFC 3339 | Время создания. Приходит в списках |
Значения role:
| Значение | Роль в панели |
|---|---|
owner | Владелец |
admin | Администратор |
teamlead | Тимлид Баеров |
buyer | Баер |
designer | Верстальщик |
viewer | Финансист |
Что может каждая роль — на странице Команда и роли.
Особенности запросов по Api-Key
- Запрос выполняется от имени создателя токена — см. От чьего имени работает токен. «Текущий пользователь» и «свой пароль» в методах ниже — это создатель токена.
- Панель после изменения собственной учётной записи получает код
200и новую сессию. Запрос сApi-Keyв тех же случаях получает204без тела. - Токен, созданный администратором, не меняет учётные записи владельцев: такие запросы отвечают
403— см. Защита владельца. - Изменение логина, роли, тимлида или пароля завершает открытые сессии этого пользователя в панели. Ему нужно войти заново.
Если создателю токена дать роль ниже admin, все его токены удаляются. Следующий запрос с таким токеном получит 401.
Команда
Список пользователей
GET /api/v1/usersВозвращает всех пользователей команды. Параметров нет.
Ответ — код 200 и массив объектов пользователя в порядке создания.
curl https://panel.example.com/api/v1/users \
-H "Api-Key: <токен>"[
{
"id": "3f2b8c1e-5a47-4d1b-9c0e-7a6d2f4b8e10",
"workspace_id": "9a1d4c77-0b52-4e8f-a3c6-2d5e7f8a9b01",
"email": "[email protected]",
"role": "owner",
"created_at": "2026-10-01T08:15:22.104518Z"
},
{
"id": "c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c",
"workspace_id": "9a1d4c77-0b52-4e8f-a3c6-2d5e7f8a9b01",
"email": "buyer7",
"role": "buyer",
"manager_id": "7b0c1d52-3f4e-4a6b-9c8d-1e2f3a4b5c6d",
"created_at": "2026-10-03T14:22:05.418332Z"
}
]Создать пользователя
POST /api/v1/usersСоздаёт учётную запись с логином, паролем и ролью.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
email | строка | да | Логин. Пробелы по краям отбрасываются. Регистр букв при проверке на совпадение не учитывается |
password | строка | да | Пароль, не короче 8 символов |
role | строка | нет | Роль. По умолчанию buyer |
manager_id | строка, UUID | нет | ID тимлида. Учитывается только для ролей buyer и designer — см. Тимлид и его баеры |
Ответ — код 201 и объект пользователя без created_at.
| Код | code | message | Когда |
|---|---|---|---|
400 | bad_request | invalid json | Тело не разобрано |
422 | validation | email и пароль (мин. 8 символов) обязательны | Логин пустой или пароль короче 8 символов |
422 | validation | недопустимая роль | Значения role нет в списке ролей |
403 | forbidden | назначить роль владельца может только владелец | role = owner, а токен создан администратором |
409 | conflict | пользователь с таким email уже есть | Логин занят |
curl -X POST https://panel.example.com/api/v1/users \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"email": "buyer8", "password": "S3cure-pass", "role": "buyer", "manager_id": "7b0c1d52-3f4e-4a6b-9c8d-1e2f3a4b5c6d"}'Изменить пользователя
PUT /api/v1/users/{id}Меняет роль, тимлида и логин. id в пути — ID пользователя.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
role | строка | да | Роль. Отправляйте и тогда, когда она не меняется |
manager_id | строка, UUID | нет | ID тимлида для ролей buyer и designer. Если поля нет или оно пустое, закрепление снимается |
email | строка | нет | Новый логин. Пустое значение оставляет прежний |
Ответ — код 204 без тела. Если новая роль ниже admin, API-токены этого пользователя удаляются.
| Код | code | message | Когда |
|---|---|---|---|
422 | validation | недопустимая роль | role не передана, её нет в списке ролей или тело не разобрано |
403 | forbidden | назначить роль владельца может только владелец | role = owner, а токен создан администратором |
403 | forbidden | управлять учётками владельца может только владелец | Изменяемый пользователь — владелец, а токен создан администратором |
404 | not_found | пользователь не найден или resource not found | Пользователя с таким ID нет |
409 | conflict | пользователь с таким логином уже есть | Логин занят |
422 | validation | нельзя удалить/разжаловать последнего владельца | Единственному владельцу назначается другая роль |
Задать пароль пользователю
POST /api/v1/users/{id}/passwordЗадаёт новый пароль без знания старого.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
password | строка | да | Новый пароль, не короче 8 символов |
Ответ — код 204 без тела.
Ошибки: 400 invalid json; 422 пароль — минимум 8 символов; 403 управлять учётками владельца может только владелец; 404 пользователь не найден или resource not found, если пользователя нет.
Удалить пользователя
DELETE /api/v1/users/{id}Удаляет учётную запись. Кампании, офферы и лендинги пользователя переходят его тимлиду, а если тимлида нет — создателю токена. API-токены удалённого пользователя перестают работать.
Ответ — код 204 без тела.
| Код | code | message | Когда |
|---|---|---|---|
422 | validation | нельзя удалить самого себя | id — создатель токена |
403 | forbidden | управлять учётками владельца может только владелец | Удаляется владелец, а токен создан администратором |
404 | not_found | пользователь не найден или resource not found | Пользователя с таким ID нет |
Ограничения доступа
Ограничения задаются для ролей teamlead, buyer, designer и viewer. Как они действуют — на странице Права пользователя.
Получить ограничения пользователя
GET /api/v1/users/{id}/accessОтвет — код 200 и объект ограничений:
| Поле | Тип | Описание |
|---|---|---|
denied_sections | массив строк или null | Разделы со значением Нет доступа |
read_only_sections | массив строк или null | Разделы со значением Просмотр |
campaign_groups | массив строк или null | Разрешённые группы кампаний. null — ограничения нет. Пустая строка в массиве разрешает кампании без группы |
hidden_fields | массив строк или null | Запрещённые поля отчётов |
revision | число | Версия ограничений. 0 — ограничения ещё не сохранялись |
Ключи разделов: campaigns, offers, landers, reports, domains, traffic-sources.
Ошибка: 404 not_found с текстом resource not found, если пользователя нет.
Сохранить ограничения пользователя
PUT /api/v1/users/{id}/accessЗаменяет ограничения целиком. Сначала прочитайте текущие ограничения, измените нужные поля и отправьте объект обратно с тем же revision.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
denied_sections | массив строк | нет | Ключи закрытых разделов |
read_only_sections | массив строк | нет | Ключи разделов только для просмотра |
campaign_groups | массив строк или null | нет | Названия разрешённых групп, до 200. null снимает ограничение |
hidden_fields | массив строк | нет | Ключи метрик и группировок отчёта, до 100. Формат ключа — в разделе Запрещённые поля отчётов |
revision | число | да | Значение из последнего чтения. Для первого сохранения — 0 |
Ответ — код 200 и сохранённый объект с новым revision.
Пустой массив campaign_groups закрывает пользователю все кампании. Чтобы снять ограничение по группам, передайте null.
| Код | code | message | Когда |
|---|---|---|---|
422 | validation | Ограничения применяются к рабочим ролям; администраторы имеют полный доступ | Пользователь — владелец или администратор |
422 | validation | Некорректные ограничения | Тело не разобрано, отрицательный revision, больше 100 полей или больше 200 групп |
422 | validation | Неизвестный раздел | В списке разделов есть ключ не из шести допустимых |
422 | validation | Некорректное поле | Ключа из hidden_fields нет среди метрик и группировок отчёта |
409 | access_conflict | Права изменились. Перечитайте их перед сохранением. | revision не совпал с сохранённым. Прочитайте ограничения заново и повторите запрос |
404 | not_found | resource not found | Пользователя с таким ID нет |
curl -X PUT https://panel.example.com/api/v1/users/c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c/access \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"denied_sections": ["domains"], "read_only_sections": ["offers"], "campaign_groups": ["PL Nutra", ""], "hidden_fields": ["revenue", "cost"], "revision": 0}'Вход под пользователем и сотрудники тимлида
Войти под пользователем
POST /api/v1/users/{id}/impersonateВыдаёт сессию панели от имени сотрудника — то же, что кнопка Войти как ↗ на странице Вход под пользователем. Тела запроса нет.
Ответ — код 200: поле token с сессией на 2 часа и поле user с полями id, workspace_id, email и role. Сессия передаётся в заголовке Authorization: Bearer, а не в Api-Key.
Ошибки: 403 входить под владельцем может только владелец; 404 resource not found, если пользователя нет.
Сотрудники тимлида
GET /api/v1/my-buyersВозвращает сотрудников, закреплённых за текущим пользователем-тимлидом. У остальных ролей ответ — пустой массив [] с кодом 200. Токен работает от имени владельца или администратора, поэтому по Api-Key приходит []. Чтобы получить сотрудников тимлида, возьмите список пользователей и отберите записи по manager_id.
Профиль создателя токена
Получить часовой пояс
GET /api/v1/profile/preferencesОтвет — код 200 и объект с одним полем timezone: личный часовой пояс новых отчётов — см. Мой профиль: пароль и часовой пояс.
Сохранить часовой пояс
PUT /api/v1/profile/preferences| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
timezone | строка | да | Название зоны IANA, например Europe/Warsaw |
Ответ — код 200 и сохранённый объект {"timezone": "Europe/Warsaw"}.
Ошибки: 400 Некорректный запрос; 422 Некорректная IANA-таймзона.
Действующие ограничения текущего пользователя
GET /api/v1/profile/accessВозвращает те же поля, что ограничения пользователя, и массив effective_hidden_fields — запрещённые поля вместе с зависимыми показателями. Для владельца и администратора ограничений нет: списки приходят со значением null, effective_hidden_fields — пустой массив, revision — 0.
Сменить свой пароль
POST /api/v1/profile/passwordМеняет пароль создателя токена.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
current | строка | да | Текущий пароль |
new | строка | да | Новый пароль, не короче 8 символов |
Ответ по Api-Key — код 204 без тела.
Ошибки: 400 invalid json; 422 новый пароль — минимум 8 символов; 422 текущий пароль неверен.
Общие ошибки
400bad_requestс текстомнекорректный идентификатор или значение—idв пути илиmanager_idв теле не в формате UUID. См. Идентификаторы.403token_scope— у токена доступ неfull. См. Виды доступа.402license_required— лицензия неактивна. См. Истёкшая лицензия.- Тексты ошибок панели с пояснениями собраны в разделе Сообщения об ошибках.