API V1 Legacy
Эта страница относится только к старому совместимому контракту /api/*. Новый API v2 находится в отдельной ветке сайта.

Авторизация и пользователи

Endpoint-ы для получения токена, создания системных и клиентских аккаунтов, создания сотрудников клиента, просмотра пользователей WMS и управления JSON-полем env.

POST/api/login

Получить Sanctum API-токен. Endpoint ограничен throttle: 5 попыток в минуту.

Request

{
  "email": "client@example.com",
  "password": "secret123"
}

Success

{
  "access_token": "13097|...",
  "token_type": "Bearer"
}

Error

{
  "status": "error",
  "message": "Incorrect login or password"
}
POST/api/logout

Удаляет текущий access token. Требует Bearer token.

{
  "status": "success",
  "message": "The exit is complete"
}
GET/api/user

Возвращает текущую модель пользователя Laravel/Sanctum.

GET/api/users

Возвращает постраничный список пользователей WMS, которых текущий пользователь может видеть в ЛК на экране пользователей. Область видимости и права совпадают с ЛК: users.view, data scope, legacy domain/parent ограничения и ограничения по управляемым ролям.

АвторизацияBearer token, Sanctum.
ПраваТе же, что для просмотра пользователей в ЛК.
РолиВ ответе поле roles возвращается массивом slug-ов ролей.
Скрытые поляpassword, remember_token, permissions, env не возвращаются.

Query parameters

id[]Фильтр по ID пользователей.
id_fromНижняя граница ID пользователя включительно. Например, id_from=100 вернет пользователей с ID от 100.
id_toВерхняя граница ID пользователя включительно. Например, id_to=100 вернет пользователей с ID до 100.
domain_id[]Фильтр по домену. Доступный scope все равно принудительно применяется.
wh_id[]Фильтр по складу. Доступный scope все равно принудительно применяется.
role[]Фильтр по slug роли, например warehouse_worker.
nameПоиск по имени через LIKE.
emailПоиск по email через LIKE.
sortСортировка через запятую. Разрешено: id, name, email, domain_id, wh_id, created_at, updated_at. Минус означает DESC: -id,name.
per_pageКоличество строк на страницу, максимум 500. По умолчанию 50.
pageНомер страницы.

Examples

GET /api/users
GET /api/users?name=Ivan&sort=-id&per_page=50
GET /api/users?id_from=100
GET /api/users?id_from=100&id_to=200
GET /api/users?role[]=warehouse_manager&role[]=warehouse_worker
GET /api/users?domain_id[]=1&wh_id[]=10

Success

{
  "data": [
    {
      "id": 15,
      "name": "Ivan Ivanov",
      "email": "ivan@example.com",
      "lang": "ru",
      "storage_id": null,
      "domain_id": 1,
      "domain": {
        "id": 1,
        "name": "Main domain"
      },
      "wh_id": 10,
      "warehouse": {
        "id": 10,
        "name": "Main warehouse"
      },
      "parent_id": null,
      "data_scope": "domain",
      "roles": [
        "warehouse_worker"
      ],
      "created_at": "2026-01-01T10:00:00.000000Z",
      "updated_at": "2026-01-02T10:00:00.000000Z"
    }
  ],
  "links": {},
  "meta": {}
}
GET/api/users/{id}

Возвращает подробное описание одного пользователя WMS, если этот пользователь входит в тот же набор видимых пользователей, что и на экране пользователей в ЛК.

АвторизацияBearer token, Sanctum.
ПраваТе же, что для просмотра пользователя в ЛК.
Если не виденВозвращается 404, чтобы не раскрывать существование недоступного пользователя.

Success

{
  "data": {
    "id": 15,
    "name": "Ivan Ivanov",
    "email": "ivan@example.com",
    "lang": "ru",
    "storage_id": null,
    "domain_id": 1,
    "domain": {
      "id": 1,
      "name": "Main domain"
    },
    "wh_id": 10,
    "warehouse": {
      "id": 10,
      "name": "Main warehouse"
    },
    "parent_id": null,
    "data_scope": "domain",
    "roles": [
      "warehouse_worker"
    ],
    "created_at": "2026-01-01T10:00:00.000000Z",
    "updated_at": "2026-01-02T10:00:00.000000Z"
  }
}
POST/api/accounts/create

Админское создание нового системного аккаунта/домена.

ДоступТолько авторизованный пользователь с ролью admin.
СоздаетSiteAccount, домен, пользователя, роль warehouse_manager, FF-склад, клиентский склад, магазин, очереди сборки и упаковки.
{
  "language": "ru",
  "company": "Test Company",
  "FName": "Иван",
  "LName": "Иванов",
  "email": "owner@example.com",
  "password": "secret123",
  "massage": "Комментарий",
  "fst": 1716280000,
  "mName": null
}

fst и mName используются как антибот/хонепот. Ответ старого endpoint-а сейчас всегда краткий: {"status":"OK"}.

POST/api/clients/create

Endpoint зависит от scope вызывающего пользователя.

global/domainСоздает новый клиентский аккаунт внутри текущего домена. Нужна проверка users.create.
ownerСоздает сотрудника внутри текущего клиентского аккаунта. Нужна проверка client_users.create.
warehouseЗапрещено.

Создание нового клиента админом домена

{
  "language": "ru",
  "FName": "Даниил",
  "LName": "Матвеев",
  "email": "client-owner@example.com",
  "password": "secret123",
  "customer_company": {
    "co_name": "ООО Клиент",
    "co_legal_name": "ООО Клиент",
    "co_vat_number": "1234567890",
    "co_country_id": 1,
    "co_city_id": 10,
    "co_address": "Москва, ул. Ленина 1",
    "co_email": "billing@example.com"
  },
  "service_provider_company": {
    "co_name": "ООО Фулфилмент",
    "co_legal_name": "ООО Фулфилмент"
  },
  "shop": {
    "sh_name": "Основной магазин",
    "sh_enable_composite_items": 0
  },
  "warehouse": {
    "wh_name": "Основной склад",
    "wh_parent_id": 1,
    "wh_country_id": 1,
    "wh_currency_id": 1,
    "wh_billing_id": 12
  }
}

Создается пользователь клиента с ролью clients. Вложенные блоки customer_company, service_provider_company, shop и warehouse опциональны: если блока нет, соответствующая сущность не создается. Старое поле shop_name поддерживается и создает магазин, если блок shop не передан.

customer_company.co_nameОбязательно, если передан блок компании клиента. Созданная компания будет привязана к клиентскому складу как wh_company_id.
service_provider_company.co_nameОбязательно, если передан блок компании поставщика услуги. Созданная компания будет привязана к клиентскому складу как wh_ff_id.
shop.sh_nameОбязательно, если передан блок магазина.
warehouse.wh_nameОбязательно, если передан блок склада.
warehouse.wh_parent_idОпциональный ID родительского FF-склада. Если не передан, используется первый FF-склад текущего домена.
warehouse.wh_company_idМожно передать существующую компанию клиента, если блок customer_company не используется.
warehouse.wh_ff_idМожно передать существующую компанию поставщика услуги, если блок service_provider_company не используется.

Success

{
  "status": "OK",
  "user_id": 123,
  "customer_company_id": 10,
  "service_provider_company_id": 11,
  "shop_id": 22,
  "shop_name": "Основной магазин",
  "warehouse_id": 456
}

Если вызывает клиент с owner scope

{
  "language": "ru",
  "FName": "Петр",
  "LName": "Петров",
  "email": "client-worker@example.com",
  "password": "secret123"
}

Создается только пользователь-сотрудник клиента. Магазин, склад и очереди не создаются.

POST/api/client-users/create

Явный endpoint для создания сотрудников клиентского аккаунта.

ДоступТолько owner scope + client_users.create.
parent_idЕсли создает мастер-клиент, ставится его id. Если создает сотрудник, ставится его parent_id.
СоздаетПользователь + роль clients. Без магазина, склада и очередей.
{
  "language": "ru",
  "FName": "Петр",
  "LName": "Петров",
  "email": "worker@example.com",
  "password": "secret123"
}
{
  "status": "OK",
  "user_id": 124,
  "parent_id": 123
}
GET/api/users/{id}/env

Возвращает JSON-поле env пользователя. Нужны users.env.view, видимость вкладки env и доступ к целевому пользователю.

{
  "user_id": 42,
  "env": {
    "external_id": "CRM-42"
  }
}
PUT/api/users/{id}/env

Полностью заменяет env. Это не merge/patch. Нужны users.env.update и право редактировать вкладку env.

{
  "env": {
    "external_id": "CRM-42",
    "limits": {
      "daily_orders": 100
    }
  }
}

Отличия от предыдущей версии

Главный риск обратной совместимости: если старая клиентская интеграция вызывает POST /api/clients/create клиентским токеном и ожидала создание магазина, склада и очередей, теперь она получит создание только сотрудника клиента.

  • /api/clients/create стал зависеть от scope.
  • Для сотрудников клиента добавлен /api/client-users/create.
  • Клиент с owner scope больше не создает отдельный клиентский аккаунт своим токеном.
  • Роли ищутся по slug, а не по hardcoded id.
  • Login получил rate limit.