Категории
Дерево категорий товаров (nested set). Каждая компания, включая филиал, ведёт собственное дерево; старый филиал без своего дерева видит дерево родительской компании.
| Метод | Адрес | Назначение |
|---|---|---|
| GET | /company/product/category/tree | Дерево категорий |
| PATCH | /company/product/category/move | Переместить категорию |
| GET | /company/product/category | Список категорий |
| GET | /company/product/category/{model} | Просмотр категории |
| POST | /company/product/category | Создать категорию |
| PUT | /company/product/category/{model} | Изменить категорию |
| DELETE | /company/product/category/{model} | Удалить категорию |
| DELETE | /company/product/category/{value}/restore | Восстановить категорию |
Дерево категорий
/company/product/category/treeВозвращает дерево категорий компании (вместе с удалёнными узлами) без корневого узла. Если у компании нет своего дерева, берётся дерево ближайшей родительской компании; если нет и его — пустой массив.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
[].id | integer | ID |
[].company_id | integer | Компания |
[].lft | integer | |
[].rgt | integer | |
[].parent_id | integer | Родитель |
[].name | object | Название |
[].name.oz | string | |
[].name.ru | string | |
[].name.uz | string | |
[].created_at | string | Создано |
[].updated_at | string | Обновлено |
[].is_deleted | boolean | |
[].text | string | Текст |
[].state | object | |
[].state.disabled | boolean | |
[].state.hidden | boolean | |
[].state.opened | boolean | |
[].children | object[] | |
[].children[].id | integer | ID |
[].children[].company_id | integer | Компания |
[].children[].lft | integer | |
[].children[].rgt | integer | |
[].children[].parent_id | integer | Родитель |
[].children[].name | object | Название |
[].children[].name.oz | string | |
[].children[].name.ru | string | |
[].children[].name.uz | string | |
[].children[].created_at | string | Создано |
[].children[].updated_at | string | Обновлено |
[].children[].is_deleted | boolean | |
[].children[].text | string | Текст |
[].children[].state | object | |
[].children[].state.disabled | boolean | |
[].children[].state.hidden | boolean | |
[].children[].state.opened | boolean | |
[].children[].children | object[] | |
[].children[].children[].id | integer | ID |
[].children[].children[].company_id | integer | Компания |
[].children[].children[].lft | integer | |
[].children[].children[].rgt | integer | |
[].children[].children[].parent_id | integer | Родитель |
[].children[].children[].name | object | Название |
[].children[].children[].name.oz | string | |
[].children[].children[].name.ru | string | |
[].children[].children[].name.uz | string | |
[].children[].children[].created_at | string | Создано |
[].children[].children[].updated_at | string | Обновлено |
[].children[].children[].is_deleted | boolean | |
[].children[].children[].text | string | Текст |
[].children[].children[].state | object | |
[].children[].children[].state.disabled | boolean | |
[].children[].children[].state.hidden | boolean | |
[].children[].children[].state.opened | boolean | |
[].children[].children[].children | array |
[
{
"id": 2,
"company_id": 1,
"lft": 2,
"rgt": 13,
"parent_id": 1,
"name": {
"oz": "Category 1 oz",
"ru": "Category 1 ru",
"uz": "Category 1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": [
{
"id": 3,
"company_id": 1,
"lft": 3,
"rgt": 8,
"parent_id": 2,
"name": {
"oz": "Category 1-1 oz",
"ru": "Category 1-1 ru",
"uz": "Category 1-1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": [
{
"id": 4,
"company_id": 1,
"lft": 4,
"rgt": 5,
"parent_id": 3,
"name": {
"oz": "Category 1-1-1 oz",
"ru": "Category 1-1-1 ru",
"uz": "Category 1-1-1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-1-1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": []
},
{
"id": 5,
"company_id": 1,
"lft": 6,
"rgt": 7,
"parent_id": 3,
"name": {
"oz": "Category 1-1-2 oz",
"ru": "Category 1-1-2 ru",
"uz": "Category 1-1-2 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-1-2 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": []
}
]
},
{
"id": 6,
"company_id": 1,
"lft": 9,
"rgt": 12,
"parent_id": 2,
"name": {
"oz": "Category 1-2 oz",
"ru": "Category 1-2 ru",
"uz": "Category 1-2 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-2 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": [
{
"id": 7,
"company_id": 1,
"lft": 10,
"rgt": 11,
"parent_id": 6,
"name": {
"oz": "Category 1-2-1 oz",
"ru": "Category 1-2-1 ru",
"uz": "Category 1-2-1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-2-1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": []
}
]
}
]
},
{
"id": 8,
"company_id": 1,
"lft": 14,
"rgt": 15,
"parent_id": 1,
"name": {
"oz": "Category 2 oz",
"ru": "Category 2 ru",
"uz": "Category 2 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 2 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"children": []
}
]Переместить категорию
/company/product/category/moveПеремещает категорию id относительно категории node_id: type = before (перед), after (после) или into (внутрь, последним дочерним узлом). Корневой узел перемещать нельзя.
Из формы (
multipart/form-data) методPATCHотправляется какPOSTс параметром?_method=PATCH.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
type | string | Да | Тип. Допустимые значения: before, after, into |
id | string | Да | ID. ID существующей записи, доступной пользователю |
node_id | integer | Да | ID существующей записи, доступной пользователю |
{
"id": 2,
"node_id": 8,
"type": "before"
}curl -X PATCH "https://api.wasyt.uz/company/product/category/move" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"id":2,"node_id":8,"type":"before"}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
message | string | Сообщение |
{
"message": "Success"
}Список категорий
/company/product/categoryПлоский список категорий компании (без корня) в порядке дерева, у каждой — цепочка предков ancestors. Фильтры: name, parent_id, id.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Параметр | Описание |
|---|---|
filter[id] | ID — точное значение |
filter[parent_id] | Родитель — точное значение |
filter[name] | Название — поиск по части строки |
sort[] | Сортировка, - — по убыванию: lft, -lft |
page | Номер страницы, с 1 |
page-size | Записей на странице, не больше 20 |
show[] | Дополнительные вычисляемые данные (см. описание метода) |
GET /company/product/category?show[0]=with-deletedОтвет · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | object[] | Данные |
data[].id | integer | ID |
data[].company_id | integer | Компания |
data[].lft | integer | |
data[].rgt | integer | |
data[].parent_id | integer | Родитель |
data[].name | object | Название |
data[].name.oz | string | |
data[].name.ru | string | |
data[].name.uz | string | |
data[].created_at | string | Создано |
data[].updated_at | string | Обновлено |
data[].is_deleted | boolean | |
data[].text | string | Текст |
data[].state | object | |
data[].state.disabled | boolean | |
data[].state.hidden | boolean | |
data[].state.opened | boolean | |
data[].ancestors | array | |
data[].full_text | string | Полный текст |
{
"data": [
{
"id": 2,
"company_id": 1,
"lft": 2,
"rgt": 13,
"parent_id": 1,
"name": {
"oz": "Category 1 oz",
"ru": "Category 1 ru",
"uz": "Category 1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"ancestors": [],
"full_text": "Category 1 ru"
},
{
"id": 3,
"company_id": 1,
"lft": 3,
"rgt": 8,
"parent_id": 2,
"name": {
"oz": "Category 1-1 oz",
"ru": "Category 1-1 ru",
"uz": "Category 1-1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1-1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"ancestors": [
{
"id": 2,
"company_id": 1,
"lft": 2,
"rgt": 13,
"parent_id": 1,
"name": {
"oz": "Category 1 oz",
"ru": "Category 1 ru",
"uz": "Category 1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
}
}
],
"full_text": "Category 1 ru => Category 1-1 ru"
}
],
"links": {
"first": "https://api.wasyt.uz/company/product/category?page=1",
"last": "https://api.wasyt.uz/company/product/category?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/product/category",
"per_page": 20,
"to": 7,
"total": 7
}
}Просмотр категории
/company/product/category/{model}Возвращает категорию компании по ID.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
company_id | integer | Компания |
lft | integer | |
rgt | integer | |
parent_id | integer | Родитель |
name | object | Название |
name.oz | string | |
name.ru | string | |
name.uz | string | |
created_at | string | Создано |
updated_at | string | Обновлено |
is_deleted | boolean | |
text | string | Текст |
state | object | |
state.disabled | boolean | |
state.hidden | boolean | |
state.opened | boolean | |
ancestors | array | |
full_text | string | Полный текст |
{
"id": 2,
"company_id": 1,
"lft": 2,
"rgt": 13,
"parent_id": 1,
"name": {
"oz": "Category 1 oz",
"ru": "Category 1 ru",
"uz": "Category 1 uz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"text": "Category 1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
},
"ancestors": [],
"full_text": "Category 1 ru"
}Создать категорию
/company/product/categoryСоздаёт категорию с названием на трёх языках (ru, uz, oz), уникальным в компании. Если у компании ещё нет дерева, корень создаётся автоматически.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name.{lang} | string | Да | Название. Макс. 255 символов. Уникальное значение в компании |
{
"name": {
"ru": "Branch Category 2 ru",
"uz": "Branch Category 2 uz",
"oz": "Branch Category 2 oz"
}
}curl -X POST "https://api.wasyt.uz/company/product/category" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":{"ru":"Branch Category 2 ru","uz":"Branch Category 2 uz","oz":"Branch Category 2 oz"}}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
name | object | Название |
name.ru | string | |
name.uz | string | |
name.oz | string | |
updated_at | string | Обновлено |
created_at | string | Создано |
company_id | integer | Компания |
parent_id | integer | Родитель |
lft | integer | |
rgt | integer | |
id | integer | ID |
is_deleted | boolean |
{
"name": {
"ru": "Branch Category 2 ru",
"uz": "Branch Category 2 uz",
"oz": "Branch Category 2 oz"
},
"updated_at": "2026-09-30 12:52:17",
"created_at": "2026-09-30 12:52:17",
"company_id": 2,
"parent_id": 9,
"lft": 4,
"rgt": 5,
"id": 19,
"is_deleted": false
}Изменить категорию
/company/product/category/{model}Меняет локализованное название категории; положение в дереве меняется через перемещение категории.
Из формы (
multipart/form-data) методPUTотправляется какPOSTс параметром?_method=PUT.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name.{lang} | string | Да | Название. Макс. 255 символов. Уникальное значение в компании |
{
"name": {
"ru": "Category 1 ru",
"uz": "Category 1 uz",
"oz": "Category 1 oz"
}
}curl -X PUT "https://api.wasyt.uz/company/product/category/2" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":{"ru":"Category 1 ru","uz":"Category 1 uz","oz":"Category 1 oz"}}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
company_id | integer | Компания |
lft | integer | |
rgt | integer | |
parent_id | integer | Родитель |
name | object | Название |
name.ru | string | |
name.uz | string | |
name.oz | string | |
created_at | string | Создано |
updated_at | string | Обновлено |
is_deleted | boolean | |
text | string | Текст |
state | object | |
state.disabled | boolean | |
state.hidden | boolean | |
state.opened | boolean |
{
"id": 2,
"company_id": 1,
"lft": 2,
"rgt": 13,
"parent_id": 1,
"name": {
"ru": "Category 1 ru",
"uz": "Category 1 uz",
"oz": "Category 1 oz"
},
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:52:21",
"is_deleted": false,
"text": "Category 1 ru",
"state": {
"disabled": false,
"hidden": false,
"opened": true
}
}Удалить категорию
/company/product/category/{model}Мягко удаляет категорию; её можно восстановить.
Из формы (
multipart/form-data) методDELETEотправляется какPOSTс параметром?_method=DELETE.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
message | string | Сообщение |
{
"message": "Success"
}Восстановить категорию
/company/product/category/{value}/restoreВосстанавливает ранее удалённую категорию компании по ID.
Из формы (
multipart/form-data) методDELETEотправляется какPOSTс параметром?_method=DELETE.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
value | ID записи (в том числе удалённой) |
Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
message | string | Сообщение |
{
"message": "Success"
}
