Итоговый документ (для разработчиков)
Страница для тех, кто работает с выдачей поиска — интегрирует API или кастомизирует виджет. Она описывает, во что превращается один <offer> в ответе поиска.
TIP
Имена характеристик в ответе — латинские (задаются в настройках проекта и там же видны). Например, характеристика Цвет может возвращаться как cvet. Сверяйтесь с настройками полей проекта.
Документ одного SKU (группировка выключена)
При выключенной группировке один <offer> → один документ:
json
{
"id": "5684",
"group_id": "5652",
"name": "Баска на завышенной талии с кантом",
"availability": "out of stock",
"is_available": false,
"has_discount": true,
"has_photo": true,
"price": 10100.0,
"old_price": 12100.0,
"currency": "RUB",
"vendor": "Acme",
"url": "https://example.com/product/baska-.../",
"image_url": "https://example.com/upload/.../105b68.jpg",
"images": ["https://example.com/upload/.../105b68.jpg"],
"category_names": ["Топы и баски"],
"cvet": "белый",
"razmer": "XS",
"properties": {
"Стиль": ["вечерние", "повседневные"],
"Цвет": "белый",
"Размер": "XS"
}
}Пояснения к полям
| Поле | Значение | Тип |
|---|---|---|
id, group_id | Идентификатор товара и его группы | string |
name | Название (никогда не пустое) | string |
availability | in stock / out of stock | string |
is_available | Доступен ли товар к покупке по условию доступности проекта | bool |
has_discount | Есть ли скидка: старая цена строго выше текущей | bool |
has_photo | Есть ли у товара изображение: непустая ссылка в image_url, а если она пустая — первая ссылка галереи images. Заполнители вместо ссылки (-, 0) считаются отсутствием изображения | bool |
price | Цена (по умолчанию 0) | float |
old_price | Старая цена — только если есть в фиде | float |
currency | Валюта | string |
vendor | Бренд | string |
url | Абсолютная ссылка на карточку | string |
image_url | Главное изображение | string |
images | Галерея | string[] |
category_names | Категории товара и их родители, от корня к листу | string[] |
cvet, razmer, … | Характеристики, включённые как фильтр/поиск/сортировка | string / string[] |
properties | Все характеристики товара (для отображения) | object |
Набор и имена полей зависят от настроек конкретного проекта.
Документ группы (группировка включена)
При включённой группировке документ строится из вариантов — добавляются price_min/price_max, объединённые фильтры и (опционально) variants:
json
{
"id": "5652",
"group_id": "5652",
"name": "Баска на завышенной талии с кантом",
"price": 10100.0,
"price_min": 10100.0,
"price_max": 10100.0,
"availability": ["out of stock", "in stock"],
"is_available": true,
"has_discount": false,
"has_photo": true,
"image_url": "https://example.com/upload/.../105b68.jpg",
"images": ["https://example.com/upload/.../105b68.jpg"],
"razmer": ["S", "M"],
"category_names": ["Топы и баски"],
"properties": { "Размер": ["XS", "S", "M"], "Цвет": "белый" },
"variants": [
{ "sku": "5684", "price": 10100.0, "availability": "out of stock",
"url": "https://.../baska-.../", "image_url": "https://.../105b68.jpg",
"properties": { "Размер": "XS" } },
{ "sku": "5685", "price": 10100.0, "availability": "in stock",
"properties": { "Размер": "S" } }
]
}Отличия от документа SKU:
id/group_id= ключ группы;- добавлены
price_min,price_max(по доступным вариантам); availabilityи объединяемые характеристики становятся списками;- фильтруемые характеристики (
razmerв примере) содержат значения только доступных вариантов — вpropertiesпри этом остаётся полный набор для отображения (см. доступность товаров); is_available— есть ли в группе хотя бы один доступный вариант;has_discount— есть ли скидка хотя бы у одного доступного варианта;has_photo— есть ли изображение у представителя группы: его картинку карточка и показывает;variants— детализация по каждому SKU (пусто, если детализация выключена).
API поиска
Поисковый API — Algolia-совместимый. Имена полей в ответе совпадают с описанными выше и с настройками полей проекта. Дополнительно ответ содержит objectID (строковый идентификатор записи в стиле Algolia, равен id) и — при подсветке совпадений — конверты _highlightResult / _snippetResult. Служебные имена полей задаёт проект; в личном кабинете они доступны только для чтения.