Skip to content

Сотрудники ​

Сотрудники компании и её филиалов: учётные записи для входа, роль, профиль, блокировка и уведомления в Telegram-боте.

МетодАдресНазначение
GET/company/user/employee/{model}/qrQR-код сотрудника
DELETE/company/user/employee/{value}/forceУдалить сотрудника навсегда
GET/company/user/employee/{model}/notificationУведомления сотрудника
PUT/company/user/employee/{model}/notificationИзменить уведомления сотрудника
POST/company/user/employee/{model}/notification/linkПривязать Telegram
DELETE/company/user/employee/{model}/notification/linkОтвязать Telegram
GET/company/user/employeeСписок сотрудников
GET/company/user/employee/{model}Просмотр сотрудника
POST/company/user/employeeСоздать сотрудника
PUT/company/user/employee/{model}Изменить сотрудника
DELETE/company/user/employee/{model}Заблокировать сотрудника
DELETE/company/user/employee/{value}/restoreРазблокировать сотрудника

QR-код сотрудника ​

GET/company/user/employee/{model}/qr

Возвращает data.qr_code — изображение (data URI) QR-кода со строкой WASYT-EMPLOYEE-{id} для быстрого выбора сотрудника на кассе и сканером. Нужно право на просмотр сотрудников.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
dataobjectДанные
data.qr_codestring
json
{
    "data": {
        "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFAAQMAAAD3XjfpAAAABlBMVEUEAgT8/vxJvsdeAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVRoge3ZQbaCMAyF4ThyGV1qWarLYETltSFJNShv7J8JB/rJ6J40RWkXS4A/BFfxuu13pS16CQsFCMxhOaK0i1B+twKB53AZUepLD6kGV88eEPgVauisVwGB/4FaQOBF2EJbKuGiBQSeQq8ZhgUgMIVzaVt6LyAwgXEkGpmqLWavvn..."
    }
}

Удалить сотрудника навсегда ​

DELETE/company/user/employee/{value}/force

Безвозвратно удаляет заблокированного сотрудника (вкладка «Заблокированные»): его личные записи удаляются, а в продажах, транзакциях и других документах ссылка на автора обнуляется, так что учёт не страдает. Незаблокированного сотрудника и самого себя удалить нельзя; нужно право на удаление сотрудников.

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
valueID записи (в том числе удалённой)

Ответ · 200 ​

Поля ответа
ПолеТипОписание
messagestringСообщение
json
{
    "message": "Success"
}

Уведомления сотрудника ​

GET/company/user/employee/{model}/notification

Профиль уведомлений директора или сотрудника: привязка к платформенному Telegram-боту, включённые события и меню бота (data), данные бота (bot) и can_manage_bot_sections. Свой профиль доступен всем, чужой — только с правом на изменение сотрудников. При первом обращении профиль создаётся со значениями по умолчанию.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
dataobjectДанные
data.idintegerID
data.user_idintegerПользователь
data.is_linkedboolean
data.is_enabledbooleanВключено
data.usernamenullЛогин
data.full_namenullФИО
data.eventsobjectУведомления
data.events.saleboolean
data.events.returnboolean
data.events.arrivalboolean
data.events.write_offboolean
data.events.debt_paidboolean
data.events.shift_openboolean
data.events.shift_closeboolean
data.events.low_stockboolean
data.events.big_discountboolean
data.bot_sectionsobjectРазделы бота
data.bot_sections.salesboolean
data.bot_sections.top_productsboolean
data.bot_sections.top_sellersboolean
data.bot_sections.stockboolean
data.bot_sections.cashbox_balanceboolean
data.linked_atnull
botobject
bot.usernamestringЛогин
bot.urlstringURL
bot.is_configuredboolean
can_manage_bot_sectionsboolean
json
{
    "data": {
        "id": 5,
        "user_id": 4,
        "is_linked": false,
        "is_enabled": false,
        "username": null,
        "full_name": null,
        "events": {
            "sale": true,
            "return": true,
            "arrival": true,
            "write_off": true,
            "debt_paid": true,
            "shift_open": true,
            "shift_close": true,
            "low_stock": true,
            "big_discount": true
        },
        "bot_sections": {
            "sales": true,
            "top_products": true,
            "top_sellers": true,
            "stock": true,
            "cashbox_balance": false
        },
        "linked_at": null
    },
    "bot": {
        "username": "wasyttestbot",
        "url": "https://t.me/wasyttestbot",
        "is_configured": true
    },
    "can_manage_bot_sections": true
}

Изменить уведомления сотрудника ​

PUT/company/user/employee/{model}/notification

Сохраняет is_enabled, события events и меню бота bot_sections. bot_sections применяется только если вызывающий может управлять сотрудниками; иначе поле молча игнорируется. Возвращает обновлённый профиль.

Из формы (multipart/form-data) метод PUT отправляется как POST с параметром ?_method=PUT.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
is_enabledbooleanНетВключено
eventsarrayНетУведомления
events[]booleanНетУведомления
bot_sectionsarrayНетРазделы бота
bot_sections[]booleanНетРазделы бота
json
{
    "events": {
        "write_off": null
    },
    "bot_sections": {
        "cashbox_balance": 1
    }
}
bash
curl -X PUT "https://api.wasyt.uz/company/user/employee/4/notification" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"events":{"write_off":null},"bot_sections":{"cashbox_balance":1}}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
dataobjectДанные
data.idintegerID
data.user_idintegerПользователь
data.is_linkedboolean
data.is_enabledbooleanВключено
data.usernamenullЛогин
data.full_namenullФИО
data.eventsobjectУведомления
data.events.saleboolean
data.events.returnboolean
data.events.arrivalboolean
data.events.debt_paidboolean
data.events.low_stockboolean
data.events.write_offboolean
data.events.shift_openboolean
data.events.shift_closeboolean
data.events.big_discountboolean
data.bot_sectionsobjectРазделы бота
data.bot_sections.salesboolean
data.bot_sections.stockboolean
data.bot_sections.top_sellersboolean
data.bot_sections.top_productsboolean
data.bot_sections.cashbox_balanceboolean
data.linked_atnull
botobject
bot.usernamestringЛогин
bot.urlstringURL
bot.is_configuredboolean
can_manage_bot_sectionsboolean
json
{
    "data": {
        "id": 7,
        "user_id": 4,
        "is_linked": false,
        "is_enabled": false,
        "username": null,
        "full_name": null,
        "events": {
            "sale": true,
            "return": true,
            "arrival": true,
            "debt_paid": true,
            "low_stock": true,
            "write_off": false,
            "shift_open": true,
            "shift_close": true,
            "big_discount": true
        },
        "bot_sections": {
            "sales": true,
            "stock": true,
            "top_sellers": true,
            "top_products": true,
            "cashbox_balance": true
        },
        "linked_at": null
    },
    "bot": {
        "username": "wasyttestbot",
        "url": "https://t.me/wasyttestbot",
        "is_configured": true
    },
    "can_manage_bot_sections": true
}

Привязать Telegram ​

POST/company/user/employee/{model}/notification/link

Привязывает чат Telegram по 6-значному code, который бот выдал человеку. Выполнить может только сам владелец профиля. Ошибка, если код неверен или истёк, либо этот Telegram уже привязан к другому сотруднику компании; после привязки уведомления включаются.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
codeintegerДаКод. Ровно 6 цифр
json
{
    "code": "482173"
}
bash
curl -X POST "https://api.wasyt.uz/company/user/employee/2/notification/link" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"code":"482173"}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
dataobjectДанные
data.idintegerID
data.user_idintegerПользователь
data.is_linkedboolean
data.is_enabledbooleanВключено
data.usernamestringЛогин
data.full_namestringФИО
data.eventsobjectУведомления
data.events.saleboolean
data.events.returnboolean
data.events.arrivalboolean
data.events.debt_paidboolean
data.events.low_stockboolean
data.events.write_offboolean
data.events.shift_openboolean
data.events.shift_closeboolean
data.events.big_discountboolean
data.bot_sectionsobjectРазделы бота
data.bot_sections.salesboolean
data.bot_sections.stockboolean
data.bot_sections.top_sellersboolean
data.bot_sections.top_productsboolean
data.bot_sections.cashbox_balanceboolean
data.linked_atstring
botobject
bot.usernamestringЛогин
bot.urlstringURL
bot.is_configuredboolean
can_manage_bot_sectionsboolean
json
{
    "data": {
        "id": 1,
        "user_id": 2,
        "is_linked": true,
        "is_enabled": true,
        "username": "aziz_t",
        "full_name": "Aziz Torayev",
        "events": {
            "sale": true,
            "return": true,
            "arrival": true,
            "debt_paid": true,
            "low_stock": true,
            "write_off": true,
            "shift_open": true,
            "shift_close": true,
            "big_discount": true
        },
        "bot_sections": {
            "sales": true,
            "stock": true,
            "top_sellers": true,
            "top_products": true,
            "cashbox_balance": false
        },
        "linked_at": "2026-09-30T07:56:20.000000Z"
    },
    "bot": {
        "username": "wasyttestbot",
        "url": "https://t.me/wasyttestbot",
        "is_configured": true
    },
    "can_manage_bot_sections": true
}
DELETE/company/user/employee/{model}/notification/link

Снимает привязку чата Telegram и выключает уведомления. Доступно владельцу профиля или пользователю с правом на изменение сотрудников.

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ ​

Пример ответа пока не записан тестами.

Список сотрудников ​

GET/company/user/employee

Сотрудники (тип employee) компании и её филиалов с ролью и профилем. Заблокированные выводятся через show[]=only-deleted.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры запроса ​

ПараметрОписание
filter[id]ID — одно значение или список filter[id][]
filter[type]Тип — точное значение
filter[role_id]Роль — точное значение
filter[company_id]Компания — одно значение или список filter[company_id][]
filter[partner_id]Партнёр — одно значение или список filter[partner_id][]
filter[are_all_companies_available]точное значение
filter[companies_responsibility.id]ID — одно значение или список filter[companies_responsibility.id][]
filter[username_or_phone]Логин или телефон — точное значение (с учётом вложенных)
sort[]Сортировка, - — по убыванию: id, -id, username, -username
with[]Подгрузить связи: profile, role, company, partner, companies_responsibility
pageНомер страницы, с 1
page-sizeЗаписей на странице, не больше 20
http
GET /company/user/employee?sort[0]=id&sort[1]=-id&sort[2]=username&sort[3]=-username

Ответ · 200 ​

Постраничный ответ: записи в data[], пагинация в links и meta.

Поля ответа
ПолеТипОписание
dataobject[]Данные
data[].idintegerID
data[].typestringТип
data[].role_idintegerРоль
data[].company_idintegerКомпания
data[].partner_idnullПартнёр
data[].usernamestringЛогин
data[].pinflnullПИНФЛ
data[].phonestringТелефон
data[].sipuni_sip_numberstringVoIP - Sipuni (SIP-номер)
data[].is_confirmedboolean
data[].are_all_companies_availableboolean
data[].last_login_atnull
data[].created_atstringСоздано
data[].updated_atstringОбновлено
data[].is_deletedboolean
json
{
    "data": [
        {
            "id": 4,
            "type": "employee",
            "role_id": 4,
            "company_id": 1,
            "partner_id": null,
            "username": "employee_1_1@local.host",
            "pinfl": null,
            "phone": "998030000001",
            "sipuni_sip_number": "211",
            "is_confirmed": true,
            "are_all_companies_available": false,
            "last_login_at": null,
            "created_at": "2026-09-30 12:47:59",
            "updated_at": "2026-09-30 12:49:04",
            "is_deleted": false
        },
        {
            "id": 5,
            "type": "employee",
            "role_id": 4,
            "company_id": 1,
            "partner_id": null,
            "username": "employee_1_2@local.host",
            "pinfl": null,
            "phone": "998030000002",
            "sipuni_sip_number": "212",
            "is_confirmed": true,
            "are_all_companies_available": false,
            "last_login_at": null,
            "created_at": "2026-09-30 12:47:59",
            "updated_at": "2026-09-30 12:47:59",
            "is_deleted": false
        }
    ],
    "links": {
        "first": "https://api.wasyt.uz/company/user/employee?page=1",
        "last": "https://api.wasyt.uz/company/user/employee?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [],
        "path": "https://api.wasyt.uz/company/user/employee",
        "per_page": 20,
        "to": 4,
        "total": 4
    }
}

Просмотр сотрудника ​

GET/company/user/employee/{model}

Один сотрудник компании или её филиала с ролью и профилем.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
typestringТип
role_idintegerРоль
company_idintegerКомпания
partner_idnullПартнёр
usernamestringЛогин
pinflnullПИНФЛ
phonestringТелефон
sipuni_sip_numberstringVoIP - Sipuni (SIP-номер)
is_confirmedboolean
are_all_companies_availableboolean
last_login_atnull
created_atstringСоздано
updated_atstringОбновлено
is_deletedboolean
json
{
    "id": 4,
    "type": "employee",
    "role_id": 4,
    "company_id": 1,
    "partner_id": null,
    "username": "employee_1_1@local.host",
    "pinfl": null,
    "phone": "998030000001",
    "sipuni_sip_number": "211",
    "is_confirmed": true,
    "are_all_companies_available": false,
    "last_login_at": null,
    "created_at": "2026-09-30 12:47:59",
    "updated_at": "2026-09-30 12:49:04",
    "is_deleted": false
}

Создать сотрудника ​

POST/company/user/employee

Создаёт сотрудника компании. Логин (username) произвольный и уникален во всей системе, телефон уникален среди активных пользователей компании и её филиалов, пароль (new_password) обязателен: минимум 8 символов, буквы и цифры. Роль — роль сотрудника своей или головной компании.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
role_idintegerДаРоль. ID существующей записи, доступной пользователю
usernamestringДаЛогин. Латиница, цифры и ._@+-, от 3 до 255 символов. Уникальное значение
phonestringДаТелефон. Формат 998xxyyyzzzz. Уникальное значение
sipuni_sip_numberstringНетVoIP - Sipuni (SIP-номер). Макс. 10 символов
new_passwordstringДаНовый пароль. Пароль (правила надёжности)
new_password_confirmationstringНетПодтверждение нового пароля. Совпадает с new_password
profile.first_namestringДаИмя. Макс. 100 символов. Только буквы, пробел и дефис
profile.last_namestringДаФамилия. Макс. 100 символов. Только буквы, пробел и дефис
profile.positionstringНетДолжность. Макс. 255 символов
profile.birth_datestring (date)НетДата рождения. Не позже сегодняшнего дня
profile.genderstringДаПол. Допустимые значения: male, female
json
{
    "role_id": 4,
    "company_id": 1,
    "username": "employee_1_3@local.host",
    "phone": "998040000005",
    "sipuni_sip_number": "213",
    "new_password": "***",
    "new_password_confirmation": "***",
    "profile": {
        "first_name": "FIRST NAME",
        "last_name": "LAST NAME",
        "position": "Position",
        "gender": "male",
        "birth_date": "1990-01-01"
    }
}
bash
curl -X POST "https://api.wasyt.uz/company/user/employee" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"role_id":4,"company_id":1,"username":"employee_1_3@local.host","phone":"998040000005","sipuni_sip_number":"213","new_password":"***","new_password_confirmation":"***","profile":{"first_name":"FIRST NAME","last_name":"LAST NAME","position":"Position","gender":"male","birth_date":"1990-01-01"}}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
typestringТип
role_idintegerРоль
usernamestringЛогин
phonestringТелефон
sipuni_sip_numberstringVoIP - Sipuni (SIP-номер)
updated_atstringОбновлено
created_atstringСоздано
are_all_companies_availableboolean
company_idintegerКомпания
idintegerID
last_login_atstring
is_deletedboolean
json
{
    "type": "employee",
    "role_id": 4,
    "username": "employee_1_3@local.host",
    "phone": "998040000005",
    "sipuni_sip_number": "213",
    "updated_at": "2026-09-30 12:56:09",
    "created_at": "2026-09-30 12:56:09",
    "are_all_companies_available": false,
    "company_id": 1,
    "id": 21,
    "last_login_at": "2026-09-30 12:56:09",
    "is_deleted": false
}

Пример ошибки · 422 ​

json
{
    "message": "Поле fields.profile.gender обязательно для заполнения.",
    "errors": {
        "profile.gender": [
            "Поле fields.profile.gender обязательно для заполнения."
        ]
    }
}

Изменить сотрудника ​

PUT/company/user/employee/{model}

Меняет данные сотрудника по тем же правилам; new_password необязателен. При смене пароля все токены сотрудника отзываются; если сотрудник меняет сам себя, ответ содержит новый token, иначе — сообщение об успехе.

Из формы (multipart/form-data) метод PUT отправляется как POST с параметром ?_method=PUT.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
role_idintegerДаРоль. ID существующей записи, доступной пользователю
usernamestringДаЛогин. Латиница, цифры и ._@+-, от 3 до 255 символов. Уникальное значение
phonestringДаТелефон. Формат 998xxyyyzzzz. Уникальное значение
sipuni_sip_numberstringНетVoIP - Sipuni (SIP-номер). Макс. 10 символов
new_passwordstringНетНовый пароль. Пароль (правила надёжности)
new_password_confirmationstringНетПодтверждение нового пароля. Совпадает с new_password
profile.first_namestringДаИмя. Макс. 100 символов. Только буквы, пробел и дефис
profile.last_namestringДаФамилия. Макс. 100 символов. Только буквы, пробел и дефис
profile.positionstringНетДолжность. Макс. 255 символов
profile.birth_datestring (date)НетДата рождения. Не позже сегодняшнего дня
profile.genderstringДаПол. Допустимые значения: male, female
json
{
    "role_id": 4,
    "company_id": 1,
    "username": "employee_1_1@local.host",
    "phone": "998040000001",
    "new_password": "***",
    "new_password_confirmation": "***",
    "profile": {
        "first_name": "FIRST NAME",
        "last_name": "LAST NAME",
        "position": "Position",
        "gender": "female"
    }
}
bash
curl -X PUT "https://api.wasyt.uz/company/user/employee/4" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"role_id":4,"company_id":1,"username":"employee_1_1@local.host","phone":"998040000001","new_password":"***","new_password_confirmation":"***","profile":{"first_name":"FIRST NAME","last_name":"LAST NAME","position":"Position","gender":"female"}}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
messagestringСообщение
json
{
    "message": "Success"
}

Заблокировать сотрудника ​

DELETE/company/user/employee/{model}

Блокирует сотрудника (мягкое удаление): он пропадает из списка и не может войти. Заблокировать самого себя нельзя.

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
messagestringСообщение
json
{
    "message": "Success"
}

Разблокировать сотрудника ​

DELETE/company/user/employee/{value}/restore

Восстанавливает заблокированного сотрудника компании.

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
valueID записи (в том числе удалённой)

Ответ · 200 ​

Поля ответа
ПолеТипОписание
messagestringСообщение
json
{
    "message": "Success"
}