API наборов товаров

Наборы товаров — это контейнеры, в которых хранятся карточки товаров для AI оператора. Один набор можно привязать к нескольким каналам. Набор бывает двух режимов:

  • with_links — товары содержат ссылки на ваш сайт; карточки создаются/обновляются через API или CSV.
  • without_links — товары без ссылок; карточки формируются из загружаемого файла (управление файлами через UI).

Через API товары по одному можно upsert-ить только в наборах with_links.

Токен должен иметь scope ai_products_sets.

Базовый URL: https://api.apx.chat/api

Наборы

Получение списка

GET /api/ai-resources/external/products-sets?mode=with_links

Параметр mode опционален (with_links / without_links).

Создание

POST /api/ai-resources/external/products-sets

const url = "https://api.apx.chat/api/ai-resources/external/products-sets";

const payload = {
"name": "Основной каталог",
"mode": "with_links"
};

const response = await fetch(url, {
  method: "POST",
  headers: {
    "X-Api-Token": "tok_xxxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
});

const data = await response.json();
console.log(data);

Получение / обновление / удаление

  • GET /api/ai-resources/external/products-sets/{id}
  • PATCH /api/ai-resources/external/products-sets/{id}
  • DELETE /api/ai-resources/external/products-sets/{id}?confirmed=true

Каналы, использующие набор

GET /api/ai-resources/external/products-sets/{id}/channels

Товары в наборе

Структура товара

JSON
{
  "id": "sku-1001",
  "href": "https://shop.example.com/products/sku-1001",
  "title": "Название",
  "description": "Короткое описание",
  "price": 1990,
  "priceOld": 2490,
  "images": ["https://cdn.example.com/images/sku-1001.jpg"],
  "tags": ["кроссовки", "мужские"],
  "payload": { "brand": "Acme", "inventory": 42 }
}
  • id — обязательно, 1–255 символов.
  • href — обязательно, валидный URL (http/https).

Список

GET /api/ai-resources/external/products-sets/{setId}/products?page=1&limit=20

Создание (upsert по id)

POST /api/ai-resources/external/products-sets/{setId}/products

const url = "https://api.apx.chat/api/ai-resources/external/products-sets/{setId}/products";

const payload = {
"id": "sku-1001",
"href": "https://shop.example.com/products/sku-1001",
"title": "Кроссовки Acme"
};

const response = await fetch(url, {
  method: "POST",
  headers: {
    "X-Api-Token": "tok_xxxxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
});

const data = await response.json();
console.log(data);

Обновление

PUT /api/ai-resources/external/products-sets/{setId}/products/{productId}

При обновлении id в теле можно не передавать, он берётся из URL.

Удаление

DELETE /api/ai-resources/external/products-sets/{setId}/products/{productId}

Удаление асинхронное, в ответе возвращается jobId.

Привязка к каналу

Набор привязывается к каналу через настройки AI оператора канала — поле productUuid.