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
Товары в наборе
Структура товара
{
"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.