Каталог отдаётся одним и тем же эндпоинтом покупателю и интеграции — различается только набор полей. По ключу с правами на товары вы получаете служебные поля: физический остаток без вычета резервов, код маркировки, настройки производства и лимиты продаж.
С 16.09.2026 товар может быть заведён не только на размерах, но и на системе атрибутов (Размер, Цвет, Принт — в любой комбинации). Ответ дополнен полями attributes[] (какие атрибуты и значения есть у товара) и variants[] (конкретные комбинации значений со своим остатком) — см. термин «Атрибут и вариант». Поле sizes[] и адресация по sizeId остаются рабочими для товаров на легаси-размере; variantId — рекомендуемый способ для новых интеграций.
Доступ:Ключ интеграцииСессия сотрудникаБез авторизацииПраво:manage_products или products.view_production — для служебных полей
Набор полей зависит от прав ключа. Без прав на товары ответ будет таким же, каким его видит покупатель: без служебных полей.
Параметры запроса
Параметр
Тип
Обязателен
Описание
category
string | number
нет
Число понимается как идентификатор категории, строка — как её точное название.
search
string
нет
Поиск по названию и адресному имени.
hasDiscount
true | false
нет
Только со скидкой либо только без неё.
collectionId
string
нет
Товары одной коллекции.
sortBy
string
нет
Порядок. Неизвестное значение молча заменяется порядком по умолчанию.name_asc · name_desc · price_asc · price_desc · newest · oldest
inStock
true | false
нет
Ручной флаг наличия. Служебный фильтр — покупателю такого выбора нет.
soldout
true | false
нет
Ручная пометка «продано».
isDeleted
true | false
нет
Показать удалённые товары. Без прав на товары игнорируется.
brand
string
нет
Код бренда — только если ключ имеет доступ к нескольким брендам.
public
true
нет
То же самое поле, что и у публичного каталога: отсекает скрытые и «только по ссылке» товары. Служебному ключу передавать не обязательно.
Поля ответа
Поле
Тип
Описание
price
number
Цена товара.в копейках
discount
number
Скидка: сумма или проценты, смотря что указано в discountType.
sizes[].quantity
number
Остаток размера УЖЕ за вычетом резервов.
sizes[].physicalQuantity
number
Сырой остаток на складе. Только со служебными правами.
sizes[].chestnyZnak
string | null
Код маркировки. Только со служебными правами.
sizes[].productionThreshold
number
Порог, ниже которого позиция попадает в очередь производства.
sizes[].productionBatchSize
number
Размер производственной партии. Ноль означает «не производить».
attributes[].name
string
Название атрибута (Размер, Цвет, Принт…) — оси выбора для UI-переключателей. Не путать с variants[] ниже: attributes[] отвечает "какие есть параметры и значения", variants[] — "какие конкретно комбинации можно купить и с каким остатком". См. термин «Атрибут и вариант».
attributes[].values[]
array
Значения атрибута, реально используемые в вариантах этого товара: { id, value }.
variants[].id
number
Идентификатор варианта (конкретной покупаемой комбинации значений attributes[] выше) — используйте как variantId в корзине и заказе.
variants[].availableQuantity
number
Остаток варианта за вычетом резервов.
variants[].attributeValueIds
number[]
Значения атрибутов, образующие этот вариант.
variants[].attributes[]
array
То же самое человекочитаемо: { attributeId, attributeName, valueId, value }.
soldout
boolean
Ручная пометка «продано».
popularityRank
int
Место в рейтинге популярности по числу продаж среди товаров этой выдачи, 1 — самый продаваемый; считается только для списка.
Все атрибуты бренда (Размер, Цвет, Принт…) со своими значениями.
Доступ:Ключ интеграцииСессия сотрудника
Атрибут — параметр товара со своим набором значений; см. термин «Атрибут и вариант» в разделе «Термины и понятия». Значения приходят отсортированными по sortOrder — тому же порядку, что задаёт PUT .../values/reorder.
Параметры пути
Параметр
Тип
Обязателен
Описание
brandId
number
да
Идентификатор бренда.
Поля ответа
Поле
Тип
Описание
id
number
Идентификатор атрибута.
brandId
number
Бренд-владелец.
name
string
Название атрибута, например «Размер» или «Цвет».
sortOrder
number
Порядок среди атрибутов бренда.
values[].id
number
Идентификатор значения.
values[].value
string
Само значение, например «M» или «Жёлтый».
values[].sortOrder
number
Порядок значения внутри атрибута.
values[].isArchived
boolean
Архивное значение не предлагается для новых вариантов, но остаётся у уже созданных.
{"error":"Атрибут используется в 7 вариантах товаров — сначала уберите его с товаров","code":"ATTRIBUTE_IN_USE"}code: ATTRIBUTE_IN_USE
Хотя бы одно значение атрибута используется в варианте товара.
Сначала удалите/пересоздайте затрагиваемые варианты (DELETE .../variants/:id), либо отвяжите атрибут от товара (DELETE .../products/:id/attributes/:attributeId), затем повторите.
Архивирование — мягкая альтернатива удалению для значений, которые уже используются: архивное значение не предлагается при создании новых вариантов, но варианты, у которых оно уже есть, продолжают работать как прежде.
Параметры пути
Параметр
Тип
Обязателен
Описание
id
number
да
Идентификатор значения атрибута.
Тело запроса
Параметр
Тип
Обязателен
Описание
archived
boolean
нетпо умолчанию true
false — восстановить ранее заархивированное значение.
Список короче, чем полный справочник бренда: значение атрибута попадает сюда, только если оно реально встречается хотя бы в одном варианте этого товара — заведённые «про запас» значения не показываются.
Параметры пути
Параметр
Тип
Обязателен
Описание
id
number
да
Идентификатор товара.
Поля ответа
Поле
Тип
Описание
id
number
Идентификатор атрибута.
name
string
Название атрибута.
required
boolean
Обязателен ли выбор этого атрибута при заказе (задаётся в момент привязки к товару).
values[]
array
{ id, value } — только значения, встречающиеся в вариантах этого товара.
Комбинации приходят уже готовыми с клиента — сервер не строит декартово произведение сам, только создаёт то, что прислали, и молча пропускает комбинации, которые у товара уже есть (по набору attributeValueId, без учёта порядка).
Параметры пути
Параметр
Тип
Обязателен
Описание
id
number
да
Идентификатор товара.
Тело запроса
Параметр
Тип
Обязателен
Описание
combinations
number[][]
да
Список комбинаций; каждая — массив attributeValueId, образующих один вариант. Например [[10,20],[10,21]] — два варианта с общим значением 10 и разными 20/21.
Поля ответа
Поле
Тип
Описание
[]
Variant
Только реально созданные варианты — уже существующие комбинации в ответе не повторяются.
Ошибки
Код
Ответ сервера
Когда возникает
Что делать
400
{"error":"combinations должен быть непустым массивом"}
Абсолютный остаток. Если у варианта есть онлайн-склад, запись идёт через складской адаптер (резервы не задваиваются) — не пишите остаток напрямую в обход этого поля.
attributeValueIds
number[]
нет
Новый набор значений — переставляет вариант на другую комбинацию (например, «Размер: S» → «Размер: M») без удаления и пересоздания.
isVisible
boolean
нет
Показывать ли на витрине.
salesLimit
number | null
нет
null снимает лимит. Установка нового значения сбрасывает счётчик проданного (salesLimitSince = сейчас).
productionThreshold
number
нет
Порог для очереди производства.
productionBatchSize
number
нет
Размер партии. 0 — не производить.
chestnyZnak
string | null
нет
Код маркировки; нецифровые символы отбрасываются автоматически.
Поля ответа
Поле
Тип
Описание
variant
Variant
Вариант целиком после применения переданных полей.
Ошибки
Код
Ответ сервера
Когда возникает
Что делать
404
{"error":"Вариант не найден"}
Передан attributeValueIds, но variantId не существует.
—
409
{"error":"У товара уже есть вариант с такой комбинацией значений"}
attributeValueIds совпадает (без учёта порядка) с уже существующим у этого товара вариантом.