Товары
Актуальный список товаров — GET /front_api/products.json. Старый GET /products_by_id/:ids.json отвечает тем же конвертом { "status": "ok", "products": [] }.
За один запрос передают не больше ста id. Лишние id отбрасываются.
Список по id товаров
Параметр ids — id через запятую. Параметр with перечисляет дополнительные блоки через запятую. Без него в товаре нет описания, картинок целиком, опций и свойств: базовый объект и так содержит цены, модификации и признаки наличия.
Допустимые значения with: reviews_count_cached, reviews_average_rating_cached, first_image, images, characteristics, option_names, variants, short_description, description, product_field_values, bundle_info, canonical_url_collection, price_kinds, video_links, properties, accessories, accessory_values.
Отдельные параметры картинок и опций: images_limit, image_resizing_rules, video_links_details, accessories, accessory_values.
| Параметр | Описание |
|---|---|
ids обязательныйстрока |
id товаров через запятую. За один запрос не больше ста, лишние отбрасываются. |
with необязательныйстрока |
Дополнительные блоки через запятую: отзывы, картинки, характеристики, опции, модификации, описания, свойства, аксессуары и остальные из списка выше. |
images_limit необязательныйчисло |
Отдельный параметр картинок. |
image_resizing_rules необязательныйстрока |
Отдельный параметр картинок. |
video_links_details необязательныйстрока |
Отдельный параметр видео. |
accessories необязательныйстрока |
Отдельный параметр опций покупки. |
accessory_values необязательныйстрока |
Отдельный параметр значений опций. |
const ids = [761];
const withFields = ["accessories", "variants", "option_names"];
const url = `/front_api/products.json?ids=${ids.join(",")}&with=${withFields.join(",")}`;
const response = await fetch(url, {
credentials: "same-origin",
headers: { Accept: "application/json" }
});
const data = await response.json();
Ответ · 200
{
"status": "ok",
"products": [
{
"id": 761,
"title": "Apple iPhone 16 128 ГБ",
"permalink": "apple-iphone-16-128-gb",
"url": "/product/apple-iphone-16-128-gb",
"available": true,
"unit": "pce",
"price_min": 84990.0,
"price_max": 84990.0,
"option_names": [
{
"id": 2517840,
"title": "Цвет",
"permalink": "tsvet"
}
],
"variants": [
{
"id": 2176487200,
"title": "Чёрный",
"sku": "IP16-128",
"price": "84990.0",
"available": true,
"quantity": 8,
"option_values": [
{
"id": 21063191,
"option_name_id": 2517840,
"title": "Чёрный",
"permalink": "chyornyy"
}
]
}
],
"accessories": [
{
"id": 1,
"name": "Гравировка",
"permalink": "gravirovka",
"min_count": 0,
"max_count": 1,
"accessory_values": [
{
"id": 1,
"name": "Без гравировки",
"price": "0.0"
},
{
"id": 2,
"name": "Имя на корпусе",
"price": "500.0"
}
]
}
]
}
]
}
У товара price_min и price_max — числа. В примере оба равны 84990.0: это нижняя и верхняя цена его модификаций. Цена самой модификации лежит в variants[].price и приходит строкой: у «Чёрный» это "84990.0".
У опции «Гравировка» min_count равен 0, max_count равен 1: значение можно не выбирать или выбрать одно. В accessory_values есть «Без гравировки» за "0.0" и «Имя на корпусе» за "500.0".
reviews_count_cached — число отзывов товара, reviews_average_rating_cached — средняя оценка. Пока оценок нет, в обоих полях null. Тексты отзывов этот ответ не отдаёт, их читает метод из раздела отзывы.
Список по id модификаций
Нужен, когда в корзине или в «недавно смотрели» лежат id модификаций, а не товаров. В ответе всё равно товары. Модификации, которых нет, пропускаются.
| Параметр | Описание |
|---|---|
variant_ids обязательныйстрока |
id модификаций через запятую. Отсутствующие пропускаются. |
with необязательныйстрока |
Те же дополнительные блоки, что у списка по id товаров. Блок variants этот адрес добавляет сам. |
const variantIds = [2176487200];
const url = `/front_api/products_with_variant_ids.json?variant_ids=${variantIds.join(",")}`;
const response = await fetch(url, {
credentials: "same-origin",
headers: { Accept: "application/json" }
});
const data = await response.json();
Ответ · 200
{
"status": "ok",
"products": [
{
"id": 761,
"title": "Apple iPhone 16 128 ГБ",
"variants": [
{
"id": 2176487200,
"title": "Чёрный",
"price": "84990.0"
}
]
}
]
}
Блок variants для этого адреса добавляется сам. Остальные блоки подключаются тем же параметром with.
Карточка по адресу товара
GET /product/:permalink.json возвращает один товар в поле product, а не массив.
| Параметр | Описание |
|---|---|
permalink обязательныйстрока |
Адрес товара в пути. |
const response = await fetch("/product/apple-iphone-16-128-gb.json", {
credentials: "same-origin",
headers: { Accept: "application/json" }
});
const data = await response.json();
Ответ · 200
{
"status": "ok",
"product": {
"id": 761,
"title": "Apple iPhone 16 128 ГБ",
"permalink": "apple-iphone-16-128-gb",
"url": "/product/apple-iphone-16-128-gb",
"available": true,
"price_min": 84990.0,
"price_max": 84990.0,
"variants": [
{
"id": 2176487200,
"title": "Чёрный",
"price": "84990.0",
"available": true
}
]
}
}
GET /product_by_id/761.json отвечает HTML-страницей товара, не JSON. Для id используйте /front_api/products.json?ids=.
Старый список по id
GET /products_by_id/761,562.json отвечает { "status": "ok", "products": [] }. Для новых шаблонов удобнее /front_api/products.json: у него есть with и выборка по модификациям.