Пользователи
Методы /v1/portal/users — для сотрудников reKassa во внутреннем портале portal.rekassa.uz.
Каждый метод требует доступ на уровне платформы; доступы выдаются ролями, см.
Роли и доступы. Без нужного доступа ответ — 403 forbidden
с кодом доступа в details.permission.
| Метод | Доступ | Что делает |
|---|---|---|
GET /v1/portal/users |
users.read |
список с поиском |
POST /v1/portal/users |
users.manage |
создать пользователя |
GET /v1/portal/users/{id} |
users.read |
пользователь с ролями |
PATCH /v1/portal/users/{id} |
users.manage |
изменить имя, способ входа, пароль |
POST /v1/portal/users/{id}/block |
users.block |
заблокировать |
POST /v1/portal/users/{id}/unblock |
users.block |
разблокировать |
POST /v1/portal/users/{id}/role-assignments |
roles.assign |
назначить роль |
DELETE /v1/portal/users/{id}/role-assignments/{assignmentId} |
roles.assign |
снять роль |
Методы, которые меняют другого пользователя (изменение, блокировка, роли), дополнительно проверяют ранги — см. Кем можно управлять.
Список пользователей
Заголовок раздела «Список пользователей»| Параметр | По умолчанию | Описание |
|---|---|---|
search |
— | подстрока имени, фамилии или телефона, без учёта регистра, 1–100 символов |
page |
1 |
номер страницы |
size |
50 |
размер страницы, до 5000 |
Сначала идут новые пользователи. Элементы списка — профили без roleAssignments.
curl 'https://api.rekassa.uz/v1/portal/users?search=Каримов&page=1&size=20' \ -H 'Authorization: Bearer <accessToken>'const params = new URLSearchParams({ search: 'Каримов', page: '1', size: '20' })const response = await fetch(`https://api.rekassa.uz/v1/portal/users?${params}`, { headers: { Authorization: `Bearer ${accessToken}` },})const { items, total, hasMore } = await response.json(){ "items": [ { "id": "0d3f5b8e-2c41-4a7e-9f10-6c8b2a7d4e11", "phone": "+998901234567", "firstName": "Азиз", "lastName": "Каримов", "authMethod": "password", "status": "active", "hasPassword": true, "lastLoginAt": "2026-09-24T08:30:12.000Z", "createdAt": "2026-09-01T10:00:00.000Z" } ], "page": 1, "size": 20, "total": 1, "hasMore": false}Создать пользователя
Заголовок раздела «Создать пользователя»| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
phone |
string | да | см. Телефоны |
firstName |
string | да | 1–100 символов |
lastName |
string | да | 1–100 символов |
authMethod |
string | нет | sms (по умолчанию) или password |
password |
string | нет | 8–128 символов; обязателен при authMethod: "password" |
curl -X POST https://api.rekassa.uz/v1/portal/users \ -H 'Authorization: Bearer <accessToken>' \ -H 'Content-Type: application/json' \ -d '{"phone": "+998935551122", "firstName": "Нодира", "lastName": "Юсупова"}'Ответ 201 — пользователь в том же виде, что у GET /v1/portal/users/{id}.
| Статус | Код | Когда |
|---|---|---|
400 |
validation_failed |
неверный телефон, пустое имя, короткий пароль |
409 |
phone_taken |
номер уже зарегистрирован |
422 |
password_required |
authMethod: "password" без password |
Пользователь
Заголовок раздела «Пользователь»Профиль с назначенными ролями — в том же виде, что GET /v1/me.
Если пользователя нет — 404 user_not_found.
Изменить пользователя
Заголовок раздела «Изменить пользователя»Все поля необязательные: firstName, lastName, authMethod, password (8–128 символов).
Ответ 200 — обновлённый пользователь с ролями.
curl -X PATCH https://api.rekassa.uz/v1/portal/users/0d3f5b8e-2c41-4a7e-9f10-6c8b2a7d4e11 \ -H 'Authorization: Bearer <accessToken>' \ -H 'Content-Type: application/json' \ -d '{"authMethod": "password", "password": "temporary-pass-2026"}'| Статус | Код | Когда |
|---|---|---|
403 |
insufficient_rank |
ранг пользователя не ниже вашего |
403 |
permission_not_held |
у пользователя есть доступы, которых нет у вас (details.missing) |
404 |
user_not_found |
пользователя нет |
422 |
password_required |
authMethod: "password", а пароль не задан и не передан |
Блокировка
Заголовок раздела «Блокировка»Тело не нужно. Ответ 200 — пользователь с новым status.
Блокировка немедленно завершает все сессии: уже выданные access-токены перестают приниматься
на следующем же запросе. Заблокированный пользователь не может войти ни по паролю
(403 user_blocked), ни по SMS.
| Статус | Код | Когда |
|---|---|---|
403 |
insufficient_rank |
ранг пользователя не ниже вашего |
403 |
permission_not_held |
у пользователя есть доступы, которых нет у вас |
404 |
user_not_found |
пользователя нет |
422 |
cannot_change_own_status |
попытка заблокировать или разблокировать себя |
Роли пользователя
Заголовок раздела «Роли пользователя»Назначить роль
Заголовок раздела «Назначить роль»Назначает роль на уровне платформы. Подходят роли платформы и «Пользователь»; роли клиента
на уровне платформы не назначаются. roleId берите из GET /v1/portal/roles.
curl -X POST https://api.rekassa.uz/v1/portal/users/0d3f5b8e-2c41-4a7e-9f10-6c8b2a7d4e11/role-assignments \ -H 'Authorization: Bearer <accessToken>' \ -H 'Content-Type: application/json' \ -d '{"roleId": "b2e8d4a1-7c3f-4e95-a0d6-5f1c9e3b7a82"}'Ответ 201 — пользователь с обновлённым списком roleAssignments.
| Статус | Код | Когда |
|---|---|---|
403 |
insufficient_rank |
ранг роли не ниже вашего |
403 |
permission_not_held |
у роли есть доступы, которых нет у вас (details.missing) |
404 |
user_not_found, role_not_found |
нет пользователя или роли |
409 |
role_already_assigned |
роль уже назначена |
422 |
role_scope_mismatch |
роль клиента |
Снять роль
Заголовок раздела «Снять роль»assignmentId — поле id элемента roleAssignments. Ответ 200 — пользователь с оставшимися ролями.
Снять можно только роль, которую вы могли бы назначить: те же проверки ранга и доступов.
Если назначения нет — 404 role_assignment_not_found.