Перейти к основному содержимому

Каталог эфиров — GET /v3/streams

Эндпоинт возвращает запланированные, текущие и завершённые эфиры вместе с товарами, ведущими и категориями, которые нужны для их отображения.

Запрос

GET https://app.shopstory.live/v3/streams?applicationId=<application-id>&limit=20&offset=0
Accept: application/json
ПараметрОбязательноОписание
applicationIdДаВыданный ShopStory идентификатор приложения. Он выбирает область данных и не авторизует запрос.
feedProductIdНетСтабильный строковый идентификатор товара из согласованного фида. Ведущие нули значимы.
categoryIdНетЧисловой идентификатор категории эфира.
statusНетplanned, online или finished.
limitНетРазмер страницы. 0 отключает пагинацию; значения выше 100 сервер обрабатывает как 100.
offsetНетСмещение от начала набора. Передавайте вместе с положительным limit.

Все переданные фильтры объединяются по логике AND.

Конверт ответа

Успешный ответ:

{
"status": 200,
"serverTime": "2025-01-15T10:00:00.000Z",
"body": {
"plannedStreams": [],
"availableStreams": [],
"products": [],
"streamers": [],
"categories": [],
"total": 0
}
}

plannedStreams содержит эфиры со статусом planned по возрастанию plannedDate. availableStreams сначала содержит эфиры online, затем записи finished; внутри каждой группы элементы отсортированы по startDate от новых к старым.

Пагинация и total

  • Без status пагинация применяется только к availableStreams; plannedStreams возвращается полностью.
  • При status=planned пагинация применяется к plannedStreams, а availableStreams пуст.
  • При status=online или status=finished пагинация применяется к соответствующей части availableStreams, а plannedStreams пуст.
  • total — размер выбранного набора до применения limit и offset.
  • total присутствует, если передан хотя бы один фильтр либо параметр пагинации. В запросе без фильтров, limit и offset поле может отсутствовать.

Offset pagination не создаёт snapshot. Новый эфир или смена статуса между запросами может сдвинуть элементы на следующих страницах. Для длительно открытого каталога периодически загружайте первую страницу заново и объединяйте элементы по строковому id; не используйте offset как механизм инкрементальной синхронизации.

Модель эфира

ПолеТипОписание
idstringИдентификатор эфира.
applicationstringИдентификатор приложения.
name, descriptionstringНазвание и описание эфира.
streamerstringИдентификатор ведущего из streamers.
statusstringplanned, online или finished.
plannedDate, startDate, endDatestring | nullВременные метки ISO 8601. Отсутствующая дата передаётся как null.
previewImagesarrayИзображения эфира.
productsstring[]Внутренние идентификаторы товаров из products.
productFeedIdsstring[]Идентификаторы этих товаров из фида. Поле может отсутствовать, если сопоставлений нет.
categoriesinteger[]Идентификаторы категорий.

Модель товара

ПолеТипОписание
idstringВнутренний идентификатор ShopStory.
applicationstringИдентификатор приложения.
namestringНазвание товара.
feedProductAvailablebooleanДоступность из последней успешно обработанной версии товарного фида.
feedProductIdstringИдентификатор из фида; может отсутствовать для ранее загруженных данных.
vendorCodestringАртикул продавца; может отсутствовать.
feedProductGroupIdstringИдентификатор группы или варианта; может отсутствовать.
urlstringURL карточки товара.
previewImagesarrayИзображения товара.

Идентификаторы товаров являются строками. Не преобразуйте их в числовой тип: это может удалить ведущие нули или снизить точность.

Доступность из фида

feedProductAvailable — снимок, полученный при синхронизации фида. Поле не подтверждает остаток в конкретном магазине, и отдельного endpoint проверки остатков в Public API нет.

Остаток выбранного магазина в Web SDK приходит от обработчика наличия на стороне сайта ритейлера. При интеграции через Public API эту проверку выполняет интерфейс клиента: Наличие товара и остатки.

streamers содержит id, application и профиль ведущего. categories содержит id, application и name. Полная машинно-читаемая схема опубликована в OpenAPI.

Ошибки

Для /v3/streams валидационные и внутренние ошибки передаются в общем конверте при транспортном HTTP 200. Проверяйте оба уровня: сначала возможность прочитать HTTP-ответ, затем верхнеуровневое поле status.

{
"status": 400,
"serverTime": "2025-01-15T10:00:00.000Z",
"body": {
"error": "invalid",
"message": "invalid status"
}
}

Не привязывайте обработку к точному тексту message. Для ветвления используйте status и body.error. Сетевой шлюз может вернуть собственный HTTP 4xx или 5xx, поэтому транспортные ошибки обрабатывайте отдельно.

Связанные разделы