API V1 Legacy
Эта страница относится только к старому совместимому контракту /api/*. Новый API v2 находится в отдельной ветке сайта.

Журнал изменений остатков

Endpoint /api/stock-movements предназначен для инкрементальной выгрузки складских изменений. Он дополняет polling по inventoryUpdated: timestamp показывает, что товар изменился, а журнал показывает конкретные движения.

GET/api/stock-movements

Постраничный append-only журнал движений. Нужен доступ offers.view.

Основной pollingКлиент хранит последний полученный id и запрашивает after_id. Ответ обрабатывается строго по возрастанию id.
Фильтрыsm_offer_id, sm_base_offer_id, sm_wh_id, sm_doc_type, sm_doc_id, movement_type, from, to.
Пагинацияper_page максимум 500, по умолчанию 100.
GET /api/stock-movements?after_id=12345&per_page=500

Алгоритм интеграции

  1. При первом запуске запросить /api/stock-movements?after_id=0&per_page=500.
  2. Обработать полученные строки в порядке возрастания id.
  3. Сохранить максимальный обработанный id на стороне клиента.
  4. Следующий запрос выполнять как /api/stock-movements?after_id={last_id}.
  5. Если ответ содержит полную страницу, продолжить читать следующую страницу с обновленным after_id.

Не используйте только дату from/to как курсор. Для надежной инкрементальной выгрузки курсором должен быть id.

Поля ответа

idМонотонный ID строки журнала, основной курсор интеграции.
movement_typeТип движения: acceptance, order, stock_transfer, inventory, quant_unpacking, movement.
warehouse_idID склада.
offer_idФизический оффер, по которому было движение.
base_offer_idБазовый оффер. Для обычных товаров совпадает с товаром, для кванта указывает базовую единицу.
quantity_deltaИзменение в физической единице оффера. Минус - списание, плюс - приход.
base_quantity_deltaИзменение в базовой единице товара. Для кванта учитывает кратность.
doc_type, doc_id, doc_offer_idДокумент-источник движения и строка документа.
place_idМесто хранения, если движение привязано к полке.
batch, production_date, expiration_dateПартия и сроки, если они были у складского остатка.
occurred_atДата документа/движения.

Кванты и разукомплектация

Для разукомплектации квантов используется movement_type=quant_unpacking и doc_type=8. Одна строка документа создает минимум две строки журнала:

Исходный квантОтрицательное движение по offer_id кванта.
Выходной товарПоложительное движение по непосредственному родителю кванта.
GET /api/stock-movements?movement_type=quant_unpacking&after_id=12345

Связь с inventoryUpdated

GET /api/products?inventoryUpdated_from=... подходит, когда нужно понять, какие товары изменились. GET /api/stock-movements?after_id=... подходит, когда нужно получить сами причины изменения и точные дельты.