API индексации
API индексации обновляет цены, наличие и остатки уже проиндексированных товаров за секунды — без перезагрузки фида. Типичный сценарий: товар закончился на складе, и он должен перестать показываться «в наличии» прямо сейчас, а не через час, когда придёт следующий фид.
Авторизация
Заголовок раздела «Авторизация»- Откройте личный кабинет → Профиль → выпустите API-ключ.
- Передавайте его в заголовке
Authorization: Bearer <ключ>. - У пользователя должно быть право редактировать проект, а сам проект должен быть активен.
Ключ бессрочный. Храните его на сервере и не используйте в браузере или мобильном приложении — для них есть публичное API поиска, которому ключ не нужен.
POST https://web4.searchbooster.io/api/v1/{uuid}/product/update
curl -X POST 'https://web4.searchbooster.io/api/v1/{uuid}/product/update' \ -H 'Authorization: Bearer <API_KEY>' \ -H 'Content-Type: application/json' \ --data-raw '{ "offers": [ { "id": "627834", "fields": { "available": true, "price": 7777, "oldPrice": 8888, "count": 12, "regions": { "msk": { "available": true, "price": 7590, "count": 3 }, "spb": { "available": false } } } } ] }'$payload = ['offers' => [[ 'id' => '627834', 'fields' => ['available' => false, 'count' => 0],]]];
$ch = curl_init('https://web4.searchbooster.io/api/v1/' . $uuid . '/product/update');curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey, 'Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_TIMEOUT => 10,]);$result = json_decode(curl_exec($ch), true);import requests
resp = requests.post( f"https://web4.searchbooster.io/api/v1/{uuid}/product/update", headers={"Authorization": f"Bearer {api_key}"}, json={"offers": [{"id": "627834", "fields": {"price": 7777, "oldPrice": 8888}}]}, timeout=10,)print(resp.json())const res = await fetch(`https://web4.searchbooster.io/api/v1/${uuid}/product/update`, { method: 'POST', headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ offers: [{ id: '627834', fields: { available: false } }] }),});console.log(await res.json());| Поле | Тип | Описание |
|---|---|---|
offers |
array, до 250 | Пачка товаров. Больше — разбейте на несколько запросов. |
offers[].id |
string, числовой | offer@id из фида. Сейчас поддерживаются только числовые ID. |
fields.available |
boolean | Наличие (регион global). |
fields.price |
number | Цена. Передавайте числом, не строкой. |
fields.oldPrice |
number | Зачёркнутая цена. |
fields.count |
number | Остаток (регион global). |
fields.prices.{type}.price / .oldPrice |
number | Типизированные цены, как <price type="…"> в фиде. |
fields.regions.{regionId} |
object | available, price, oldPrice, count для региона. Регион должен быть в фиде. |
fields.pictures |
string[] | Новые картинки. |
| Статус | Тело | Что значит |
|---|---|---|
200 |
{"status":"success"} |
Всё применено. |
200 |
{"status":"warning","missing_offers":["123"]} |
Остальные применены, этих ID нет в индексе. |
400 |
{"status":"error","errors":[…]} |
Ошибка применения. |
401 |
{"message":"Unauthenticated."} |
Нет или неверный ключ. |
403 |
— | Нет прав на проект. |
404 |
— | Проект не найден или не активен. |
422 |
{"message":"…","errors":{"offers.0.fields.price":["…"]}} |
Ошибка валидации (например, цена строкой или больше 250 офферов). |
Как это работает
Заголовок раздела «Как это работает»- Изменения пишутся в индекс сразу и видны в поиске и рекомендациях через ~1 секунду.
- Если в этот момент идёт индексация фида, изменение ставится в очередь и применяется сразу после неё — ничего не теряется.
- Следующая индексация перезапишет значения из фида. Поэтому фид тоже должен содержать актуальные данные, а API — только ускорять доставку изменений между выгрузками.