Комплекты
Комплекты (наборы) из нескольких товаров со своей ценой и штрих-кодом. При продаже комплект раскладывается на строки своих компонентов.
| Метод | Адрес | Назначение |
|---|---|---|
| GET | /company/product/bundle | Список комплектов |
| GET | /company/product/bundle/{model} | Просмотр комплекта |
| POST | /company/product/bundle | Создать комплект |
| PUT | /company/product/bundle/{model} | Изменить комплект |
| DELETE | /company/product/bundle/{model} | Удалить комплект |
| DELETE | /company/product/bundle/{value}/restore | Восстановить комплект |
Список комплектов
/company/product/bundleКомплекты компании с составом. with[]=assemblable_quantity добавляет, сколько целых комплектов можно собрать из остатков (по каждому складу отдельно, в сумме). Фильтры: common (название, штрих-код), category_id, barcode, is_free_price.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры запроса
| Параметр | Описание |
|---|---|
filter[id] | ID — точное значение |
filter[company_id] | Компания — одно значение или список filter[company_id][] |
filter[creator_id] | Создатель — точное значение |
filter[category_id] | Категория — точное значение |
filter[barcode] | Штрих-код — точное значение |
filter[is_free_price] | Продажа по свободной цене — точное значение |
filter[created_at] | Создано — период: [0] — с, [1] — по (Y-m-d) |
filter[common] | Общий — точное значение (с учётом вложенных) |
sort[] | Сортировка, - — по убыванию: id, -id |
with[] | Подгрузить связи: creator.profile, company, category, items.product.unit, items.product.price, assemblable_quantity |
page | Номер страницы, с 1 |
page-size | Записей на странице, не больше 20 |
Ответ · 200
Постраничный ответ: записи в data[], пагинация в links и meta.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | object[] | Данные |
data[].id | integer | ID |
data[].creator_id | integer | Создатель |
data[].company_id | integer | Компания |
data[].category_id | integer | Категория |
data[].name | string | Название |
data[].barcode | string | Штрих-код |
data[].price | string | Цена |
data[].is_free_price | boolean | Продажа по свободной цене |
data[].is_items_sold_separately | boolean | Продажа товаров из набора отдельно |
data[].image | null | Изображение |
data[].image_thumbs | array | |
data[].created_at | string | Создано |
data[].updated_at | string | Обновлено |
data[].is_deleted | boolean |
{
"data": [
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"category_id": 4,
"name": "Bundle 1",
"barcode": "0000000009001",
"price": "3000.00",
"is_free_price": false,
"is_items_sold_separately": true,
"image": null,
"image_thumbs": [],
"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/product/bundle?page=1",
"last": "https://api.wasyt.uz/company/product/bundle?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/product/bundle",
"per_page": 20,
"to": 1,
"total": 1
}
}Просмотр комплекта
/company/product/bundle/{model}Возвращает комплект по ID; состав подключается через with[]=items.product.unit.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Параметры пути
| Параметр | Описание |
|---|---|
model | ID записи |
Параметры запроса
| Параметр | Описание |
|---|---|
with[] | Подгрузить связи |
GET /company/product/bundle/1?with[0]=category&with[1]=items.product.unit&with[2]=items.product.priceОтвет · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
creator_id | integer | Создатель |
company_id | integer | Компания |
category_id | integer | Категория |
name | string | Название |
barcode | string | Штрих-код |
price | string | Цена |
is_free_price | boolean | Продажа по свободной цене |
is_items_sold_separately | boolean | Продажа товаров из набора отдельно |
image | null | Изображение |
image_thumbs | array | |
created_at | string | Создано |
updated_at | string | Обновлено |
is_deleted | boolean | |
category | object | Категория |
category.id | integer | ID |
category.company_id | integer | Компания |
category.lft | integer | |
category.rgt | integer | |
category.parent_id | integer | Родитель |
category.name | object | Название |
category.name.oz | string | |
category.name.ru | string | |
category.name.uz | string | |
category.created_at | string | Создано |
category.updated_at | string | Обновлено |
category.is_deleted | boolean | |
category.text | string | Текст |
category.state | object | |
category.state.disabled | boolean | |
category.state.hidden | boolean | |
category.state.opened | boolean | |
items | object[] | Состав |
items[].id | integer | ID |
items[].company_id | integer | Компания |
items[].bundle_id | integer | Комплект |
items[].product_id | integer | Продукт |
items[].quantity | integer | Количество |
items[].price | string | Цена |
items[].created_at | string | Создано |
items[].updated_at | string | Обновлено |
items[].product | object | |
items[].product.id | integer | ID |
items[].product.parent_id | null | Родитель |
items[].product.creator_id | integer | Создатель |
items[].product.company_id | integer | Компания |
items[].product.category_id | integer | Категория |
items[].product.brand_id | integer | Бренд |
items[].product.unit_id | integer | Единица измерения |
items[].product.name | string | Название |
items[].product.full_text | string | Полный текст |
items[].product.plu | string | Артикул (PLU) |
items[].product.description | string | Описание |
items[].product.is_free_price | boolean | Продажа по свободной цене |
items[].product.is_favorite | boolean | |
items[].product.min_quantity | null | |
items[].product.barcode | string | Штрих-код |
items[].product.images_list | array | Изображения |
items[].product.images_list_thumbs | object[] | |
items[].product.images_list_thumbs[].widen_100 | object | |
items[].product.images_list_thumbs[].widen_100.raw | string | |
items[].product.images_list_thumbs[].widen_100.webp | string | |
items[].product.images_list_thumbs[].widen_500 | object | |
items[].product.images_list_thumbs[].widen_500.raw | string | |
items[].product.images_list_thumbs[].widen_500.webp | string | |
items[].product.images_list_thumbs[].original | object | |
items[].product.images_list_thumbs[].original.raw | string | |
items[].product.images_list_thumbs[].original.webp | string | |
items[].product.created_at | string | Создано |
items[].product.updated_at | string | Обновлено |
items[].product.is_deleted | boolean | |
items[].product.unit | object | |
items[].product.unit.id | integer | ID |
items[].product.unit.company_id | integer | Компания |
items[].product.unit.source_id | integer | Источник |
items[].product.unit.name | object | Название |
items[].product.unit.name.oz | string | |
items[].product.unit.name.ru | string | |
items[].product.unit.name.uz | string | |
items[].product.unit.accuracy | integer | Кол-во знаков после запятой |
items[].product.unit.created_at | string | Создано |
items[].product.unit.updated_at | string | Обновлено |
items[].product.unit.is_deleted | boolean | |
items[].product.price | object | Цена |
items[].product.price.id | integer | ID |
items[].product.price.updater_id | integer | Обновитель |
items[].product.price.company_id | integer | Компания |
items[].product.price.product_id | integer | Продукт |
items[].product.price.source_type | string | Источник |
items[].product.price.source_id | integer | Источник |
items[].product.price.price | integer | Цена |
items[].product.price.currency | string | Валюта |
items[].product.price.min_price | null | |
items[].product.price.min_price_percent | null | |
items[].product.price.created_at | string | Создано |
items[].product.price.updated_at | string | Обновлено |
items[].product.price.effective_min_price | integer | |
items[].product.price.price_uzs | integer | |
items[].product.price.effective_min_price_uzs | integer | |
items[].product.price.price_usd | number | |
items[].product.price.effective_min_price_usd | integer | |
items[].product.price.price_eur | number | |
items[].product.price.effective_min_price_eur | integer | |
items[].product.price.price_rub | number | |
items[].product.price.effective_min_price_rub | integer |
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"category_id": 4,
"name": "Bundle 1",
"barcode": "0000000009001",
"price": "3000.00",
"is_free_price": false,
"is_items_sold_separately": true,
"image": null,
"image_thumbs": [],
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false,
"category": {
"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
}
},
"items": [
{
"id": 1,
"company_id": 1,
"bundle_id": 1,
"product_id": 1,
"quantity": 1,
"price": "1000.00",
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"product": {
"id": 1,
"parent_id": null,
"creator_id": 1,
"company_id": 1,
"category_id": 4,
"brand_id": 1,
"unit_id": 1,
"name": "Product 1",
"full_text": "Product 1",
"plu": "0001",
"description": "Description 1",
"is_free_price": false,
"is_favorite": false,
"min_quantity": null,
"barcode": "0000000000001",
"images_list": [
"https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
],
"images_list_thumbs": [
{
"widen_100": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
},
"widen_500": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
},
"original": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
}
},
{
"widen_100": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
},
"widen_500": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
},
"original": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
}
}
],
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:52:16",
"is_deleted": false,
"unit": {
"id": 1,
"company_id": 1,
"source_id": 3,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4,
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false
},
"price": {
"id": 1,
"updater_id": 2,
"company_id": 1,
"product_id": 1,
"source_type": "purchase",
"source_id": 1,
"price": 1100,
"currency": "uzs",
"min_price": null,
"min_price_percent": null,
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"effective_min_price": 0,
"price_uzs": 1100,
"effective_min_price_uzs": 0,
"price_usd": 1.1,
"effective_min_price_usd": 0,
"price_eur": 1.1,
"effective_min_price_eur": 0,
"price_rub": 1.1,
"effective_min_price_rub": 0
}
}
},
{
"id": 2,
"company_id": 1,
"bundle_id": 1,
"product_id": 2,
"quantity": 1,
"price": "3000.00",
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"product": {
"id": 2,
"parent_id": 1,
"creator_id": 1,
"company_id": 1,
"category_id": 4,
"brand_id": 1,
"unit_id": 1,
"name": "Product 1-1",
"full_text": "Product 1-1 full text",
"plu": "0011",
"description": "Description 1-1",
"is_free_price": false,
"is_favorite": false,
"min_quantity": null,
"barcode": "0000000000011",
"images_list": [
"https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
],
"images_list_thumbs": [
{
"widen_100": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
},
"widen_500": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
},
"original": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
}
},
{
"widen_100": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
},
"widen_500": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
},
"original": {
"raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
"webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
}
}
],
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:52:16",
"is_deleted": false,
"unit": {
"id": 1,
"company_id": 1,
"source_id": 3,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4,
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false
},
"price": {
"id": 2,
"updater_id": 2,
"company_id": 1,
"product_id": 2,
"source_type": "purchase",
"source_id": 1,
"price": 2400,
"currency": "usd",
"min_price": null,
"min_price_percent": null,
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"effective_min_price": 0,
"price_uzs": 2400000,
"effective_min_price_uzs": 0,
"price_usd": 2400,
"effective_min_price_usd": 0,
"price_eur": 2400,
"effective_min_price_eur": 0,
"price_rub": 2400,
"effective_min_price_rub": 0
}
}
}
]
}Создать комплект
/company/product/bundleСоздаёт комплект из 1–100 разных товаров с количеством и ценой каждого. Цена комплекта обязательна, если не включена is_free_price; штрих-код не должен совпадать со штрих-кодом товара или другого комплекта. Каждый товар состава должен лежать хотя бы на одном складе компании.
Заголовки
| Заголовок | Значение | Описание |
|---|---|---|
Authorization | Bearer {token} | Токен из POST /common/auth/login |
Accept | application/json | Ответ в JSON |
Accept-Language | ru | Язык сообщений и названий: ru, uz, oz |
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
name | string | Да | Название. Макс. 255 символов |
category_id | integer | Нет | Категория. ID существующей записи, доступной пользователю |
barcode | integer | Нет | Штрих-код. От 5 до 13 цифр. Уникальное значение в компании |
price | number | Да | Цена. Не меньше 0 |
is_free_price | boolean | Нет | Продажа по свободной цене |
is_items_sold_separately | boolean | Нет | Продажа товаров из набора отдельно |
image | file | Нет | Изображение. Форматы: jpg, png. Макс. 2048 КБ. Размеры изображения: max_width=3840, max_height=2160 |
image_old_keys | string (JSON) | Да | Изображение |
items | object[] | Да | Состав. Мин. 1 элементов. Макс. 100 элементов |
items[].id | integer | Нет | ID |
items[].product_id | integer | Да | Товар. Без повторов. ID существующей записи, доступной пользователю |
items[].quantity | number | Да | Количество. До 8 знаков после запятой. Не меньше 0.00000001 |
items[].price | number | Да | Цена. До 2 знаков после запятой. Не меньше 0. Не больше 999999999999.99 |
{
"name": "New Bundle 1",
"category_id": 4,
"barcode": "2000020269999",
"price": 5000,
"is_free_price": null,
"is_items_sold_separately": null,
"items": [
{
"product_id": 1,
"quantity": 1,
"price": 1100
},
{
"product_id": 2,
"quantity": 2,
"price": 2000
}
],
"image_old_keys": "[]"
}curl -X POST "https://api.wasyt.uz/company/product/bundle" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":"New Bundle 1","category_id":4,"barcode":"2000020269999","price":5000,"is_free_price":null,"is_items_sold_separately":null,"items":[{"product_id":1,"quantity":1,"price":1100},{"product_id":2,"quantity":2,"price":2000}],"image_old_keys":"[]"}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
name | string | Название |
category_id | integer | Категория |
barcode | string | Штрих-код |
price | string | Цена |
is_free_price | boolean | Продажа по свободной цене |
is_items_sold_separately | boolean | Продажа товаров из набора отдельно |
image | string | Изображение |
image_thumbs | array | |
updated_at | string | Обновлено |
created_at | string | Создано |
creator_id | integer | Создатель |
company_id | integer | Компания |
id | integer | ID |
is_deleted | boolean |
{
"name": "New Bundle 1",
"category_id": 4,
"barcode": "2000020269999",
"price": "5000.00",
"is_free_price": false,
"is_items_sold_separately": false,
"image": "https://api-minio.icangroup.uz/wasyt/images/bundle/2026/09/30/6abcbfad5aa90_27d9ed0a-c9ae-4d12-9bc7-9acd37cc7dcb.png",
"image_thumbs": [],
"updated_at": "2026-09-30 12:52:13",
"created_at": "2026-09-30 12:52:13",
"creator_id": 2,
"company_id": 1,
"id": 2,
"is_deleted": false
}Изменить комплект
/company/product/bundle/{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 | string | Да | Название. Макс. 255 символов |
category_id | integer | Нет | Категория. ID существующей записи, доступной пользователю |
barcode | integer | Нет | Штрих-код. От 5 до 13 цифр. Уникальное значение в компании |
price | number | Да | Цена. Не меньше 0 |
is_free_price | boolean | Нет | Продажа по свободной цене |
is_items_sold_separately | boolean | Нет | Продажа товаров из набора отдельно |
image | file | Нет | Изображение. Форматы: jpg, png. Макс. 2048 КБ. Размеры изображения: max_width=3840, max_height=2160 |
image_old_keys | string (JSON) | Да | Изображение |
items | object[] | Да | Состав. Мин. 1 элементов. Макс. 100 элементов |
items[].id | integer | Нет | ID |
items[].product_id | integer | Да | Товар. Без повторов. ID существующей записи, доступной пользователю |
items[].quantity | number | Да | Количество. До 8 знаков после запятой. Не меньше 0.00000001 |
items[].price | number | Да | Цена. До 2 знаков после запятой. Не меньше 0. Не больше 999999999999.99 |
{
"name": "Bundle 1 updated",
"price": 2500,
"is_items_sold_separately": 1,
"items": [
{
"product_id": 1,
"quantity": 2,
"price": 1000
}
]
}curl -X PUT "https://api.wasyt.uz/company/product/bundle/1" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"name":"Bundle 1 updated","price":2500,"is_items_sold_separately":1,"items":[{"product_id":1,"quantity":2,"price":1000}]}'Ответ · 200
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
id | integer | ID |
creator_id | integer | Создатель |
company_id | integer | Компания |
category_id | integer | Категория |
name | string | Название |
barcode | string | Штрих-код |
price | string | Цена |
is_free_price | boolean | Продажа по свободной цене |
is_items_sold_separately | boolean | Продажа товаров из набора отдельно |
image | null | Изображение |
image_thumbs | array | |
created_at | string | Создано |
updated_at | string | Обновлено |
is_deleted | boolean |
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"category_id": 4,
"name": "Bundle 1 updated",
"barcode": "0000000009001",
"price": "2500.00",
"is_free_price": false,
"is_items_sold_separately": true,
"image": null,
"image_thumbs": [],
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:52:17",
"is_deleted": false
}Удалить комплект
/company/product/bundle/{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/bundle/{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"
}
