Skip to content

Коллекции

Два похожих адреса отдают разное.

GET /collection/:permalink.json отдаёт товары: название, цену, ссылку. Каталог запрашивает его, когда подгружает следующую страницу.

GET /front_api/collection/:permalink.json сами товары не отдаёт. В ответе id товаров и пункты фильтра, например «Цвет» и сколько товаров у каждого цвета. Товары по этим id запрашивают отдельно, см. список товаров.

Товары коллекции

Параметры те же, что у страницы каталога: page, page_size, order, price_min, price_max, characteristics[], options[id свойства][], only_available, q.

filters_only=1 убирает товары и оставляет status, count и properties. count_only=1 оставляет status и count.

GET/collection/telefony.json?page_size=1
Параметр Описание
page необязательный
число
Номер страницы каталога.
page_size необязательный
число
Сколько товаров вернуть на странице.
order необязательный
строка
Порядок товаров.
price_min необязательный
число
Нижняя граница цены.
price_max необязательный
число
Верхняя граница цены.
characteristics[] необязательный
число
Повторяющийся id характеристики.
options[id свойства][] необязательный
число
Повторяющийся id значения свойства.
only_available необязательный
строка
Только товары в наличии.
q необязательный
строка
Поиск внутри коллекции.
filters_only необязательный
строка
Значение 1 убирает товары и оставляет status, count и properties.
count_only необязательный
строка
Значение 1 оставляет status и count.
const params = new URLSearchParams({ page: "1", page_size: "1" });
const response = await fetch(`/collection/telefony.json?${params}`, {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "status": "ok",
  "count": 30,
  "products": [
    {
      "id": 673,
      "title": "Apple iPhone 16 Pro Max 1 ТБ",
      "permalink": "apple-iphone-16-pro-max-1-tb",
      "url": "/product/apple-iphone-16-pro-max-1-tb",
      "available": true,
      "price_min": 179990.0,
      "price_max": 179990.0,
      "variants": []
    }
  ]
}

Поля товара те же, что в списке товаров: картинки, свойства, модификации. count — сколько товаров подходит под фильтр, а не сколько объектов лежит в products.

Фильтр и id товаров

Названия и цены товаров в ответе нет. products_ids — их id на этой странице, в примере 673, 681, 689. options описывает фильтр по модификациям: группа «Цвет», значение «Чёрный», products_count равен 12 — столько товаров коллекции с этим цветом. properties устроен так же для свойств товара, в примере список пуст.

GET/front_api/collection/telefony.json
Параметр Описание
price_min необязательный
число
Нижняя граница цены.
price_max необязательный
число
Верхняя граница цены.
characteristics необязательный
число
Повторяющийся параметр характеристики.
options[id свойства][] необязательный
число
Значения свойства.
properties_gt[id] необязательный
число
Нижняя граница числового свойства.
properties_lt[id] необязательный
число
Верхняя граница числового свойства.
only_available необязательный
строка
Значение true оставляет товары в наличии.
q необязательный
строка
Поиск внутри коллекции.
max_filter_items необязательный
число
Сколько значений отдать в одной группе фильтра.
const response = await fetch("/front_api/collection/telefony.json", {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "status": "ok",
  "count": 30,
  "products_price_min": 27990.0,
  "products_price_max": 179990.0,
  "current_price_min": 27990.0,
  "current_price_max": 179990.0,
  "products_ids": [673, 681, 689],
  "properties": [],
  "options": [
    {
      "id": 2517840,
      "title": "Цвет",
      "values": [
        {
          "id": 21063191,
          "title": "Чёрный",
          "permalink": "chyornyy",
          "products_count": 12,
          "selected": false,
          "image_url": null
        }
      ]
    }
  ]
}

Тот же адрес с суффиксом фильтра, /front_api/collection/telefony/chernye-telefony.json, сужает выборку. У выбранных значений selected становится true. Неизвестный пермалинк коллекции отвечает { "status": "not_found" }.

Цены фильтра: price_min, price_max. Характеристики: повторяющийся параметр characteristics. Значения свойств: options[id свойства][]. Числовые свойства: properties_gt[id] и properties_lt[id]. Наличие: only_available=true. Поиск внутри коллекции: q. Сколько значений отдать в одной группе фильтра: max_filter_items.

Значения одного фильтра

option_ids или property_ids — id свойства, одно число. Ответ короче полного фильтра: только запрошенные группы.

GET/front_api/fetch/telefony/items.json?option_ids=2517840
Параметр Описание
option_ids необязательный
число
id свойства-опции. В запросе одно число, вместе с property_ids или вместо него.
property_ids необязательный
число
id свойства. В запросе одно число.
const response = await fetch("/front_api/fetch/telefony/items.json?option_ids=2517840", {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "status": "ok",
  "options": [
    {
      "id": 2517840,
      "title": "Цвет",
      "values": [
        {
          "id": 21063191,
          "title": "Чёрный",
          "products_count": 12,
          "selected": false
        }
      ]
    }
  ],
  "properties": []
}

SEO-фильтр

Нужен, чтобы восстановить отмеченные значения фильтра из человекочитаемого адреса. version сравнивают с версией фильтра на странице: если она устарела, фильтр запрашивают снова.

GET/front_api/collections/telefony/collection_filters/chernye-telefony.json
Параметр Описание
permalink обязательный
строка
Адрес коллекции в пути.
filter обязательный
строка
Адрес SEO-фильтра в пути.
const response = await fetch(
  "/front_api/collections/telefony/collection_filters/chernye-telefony.json",
  { credentials: "same-origin", headers: { Accept: "application/json" } }
);
const filter = await response.json();

Ответ · 200

{
  "id": 1,
  "permalink": "chernye-telefony",
  "version": 1790435079,
  "characteristics": [],
  "option_values": [
    { "id": 21063191, "option_name_id": 2517840 }
  ]
}

option_values[].id подставляют в options[option_name_id][] запроса коллекции. characteristics[].id — в параметр characteristics.

Коллекции по id

ids — id через запятую, не больше 100. Флаги menu_image, description и products_count равны строке true. Значение 1 эти поля не включает. fields — пермалинки доп. полей через запятую.

image_resizing_rules[size] добавляет в картинку меню объект resized_urls. Без валидного size этого объекта нет, ошибки тоже нет.

GET/front_api/collections.json?ids=53486014&description=true&products_count=true&menu_image=true
Параметр Описание
ids обязательный
строка
id коллекций через запятую, не больше 100.
menu_image необязательный
строка
Строка true включает картинку меню. Значение 1 поле не включает.
description необязательный
строка
Строка true включает описание. Значение 1 поле не включает.
products_count необязательный
строка
Строка true включает число товаров. Значение 1 поле не включает.
fields необязательный
строка
Пермалинки дополнительных полей через запятую.
image_resizing_rules[size] необязательный
строка
Добавляет в картинку меню объект resized_urls. Без валидного size объекта нет, ошибки тоже нет.
const params = new URLSearchParams({
  ids: "53486014",
  description: "true",
  products_count: "true",
  menu_image: "true"
});
const response = await fetch(`/front_api/collections.json?${params}`, {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "collections": [
    {
      "id": 53486014,
      "parent_id": 53486010,
      "url": "/collection/telefony",
      "title": "Телефоны",
      "has_subcollections": false,
      "menu_image": null,
      "description": "Каталог смартфонов Apple iPhone.",
      "products_count": 30
    }
  ]
}

menu_image: null — у коллекции нет картинки. Если картинка есть, в объекте будут её URL.

Подкатегории

id=-1 — дети корневой категории. Другой id — дети этой коллекции.

GET/front_api/collections/subcollections.json?id=-1
Параметр Описание
id обязательный
число
id коллекции. Значение -1 — дети корневой категории.
const response = await fetch("/front_api/collections/subcollections.json?id=-1", {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "collections": [
    {
      "id": 53486014,
      "parent_id": 53486010,
      "url": "/collection/telefony",
      "title": "Телефоны",
      "has_subcollections": false
    }
  ]
}

Меню каталога

start_level и end_level задают глубину, по умолчанию 1 и 2. menu_image_for_level — уровни, для которых нужна картинка. На промежуточных уровнях в ответе есть subcollections.

GET/front_api/collections/menu.json?start_level=1&end_level=2
Параметр Описание
start_level необязательный
число
Начальная глубина. По умолчанию 1.
end_level необязательный
число
Конечная глубина. По умолчанию 2.
menu_image_for_level необязательный
строка
Уровни, для которых нужна картинка.
const response = await fetch("/front_api/collections/menu.json?start_level=1&end_level=2", {
  credentials: "same-origin",
  headers: { Accept: "application/json" }
});
const data = await response.json();

Ответ · 200

{
  "collections": [
    {
      "id": 53486014,
      "parent_id": 53486010,
      "url": "/collection/telefony",
      "title": "Телефоны",
      "has_subcollections": false,
      "menu_image": null,
      "subcollections": []
    }
  ]
}

Плоское меню

GET /front_api/fetch/menu.json возвращает другой объект: поле menu, без вложенных детей. Параметры level и parent_id ограничивают уровень.

{
  "menu": [
    {
      "id": 53486014,
      "permalink": "telefony",
      "parent_id": 53486010,
      "title_translations": "Телефоны",
      "position": 10,
      "level_cached": 1,
      "children_count": 0
    }
  ]
}