Остатки
Остатки одной суммой или по каждому складу, склады витрины или склады ключа, товары без учёта остатка и под заказ.
На этой странице
Остатки показывают, сколько товара можно продать прямо сейчас. Их можно получить двумя способами:
- блоком
stockу каждого артикула в/products,/products/{id}и/skus, если у ключа есть правоinventory:read; - отдельным списком
/inventory. Ему нужно только правоinventory:read, право на каталог не требуется.
Что настраивает владелец
В форме ключа есть блок «Остатки». Он появляется, когда отмечено право «Видеть остатки». Как выдать ключ, описано на странице «Ключи доступа и права».
«Как отдавать остатки».
- «Одной суммой» (так по умолчанию). Вы получаете только общее число по всем
складам ключа, поля
warehousesв ответе нет. - «По каждому складу». В ответе есть ещё массив
warehouses. В блокеstockу каждого склада указано, сколько можно продать, а в/inventoryещё и сколько лежит и сколько отложено под заказы.
«С каких складов».
- Пусто (так по умолчанию). Остатки считаются по складам, с которых продаёт витрина ответа. Это включённые настоящие склады, у которых в настройках не выбрано ни одной витрины или выбрана эта. В разбивке по складам приходят только те склады, где артикул лежит.
- Выбраны склады. Остатки считаются только по ним, даже если витрина с них не продаёт. Так дропшипперу показывают отдельный склад, который завели для него. В разбивке всегда приходят все выбранные склады в порядке приоритета, даже если артикула на складе нет. У такого склада приходит ноль.
Если владелец выключит выбранный склад, этот склад остаётся в ответе, но с нулём, потому что продать с него нельзя. Остатки других складов витрины магазин вместо него не подставляет.
Если выбранный склад удалят или сделают объединённым, он пропадёт из разбивки
и ничего не добавит к available. В настройках ключа такой склад остаётся,
пока владелец не уберёт его сам, и на склады витрины ключ не переключается.
Если так пропали все выбранные склады, available приходит "0.000", а
разбивка пустая.
Если владелец переименует, переставит, включит, выключит или удалит
выбранный склад или сделает его объединённым, изменёнными считаются все
артикулы магазина, и вы узнаете об этом по updated_since.
Смена настроек «Как отдавать остатки» и «С каких складов» артикулы
изменёнными не делает, даже если владелец убрал склад из настроек ключа. О
такой смене вы узнаете по полю settings_changed_at в ответе
GET /api/v1/me. Если это время стало
позже вашей прошлой сверки, заберите остатки целиком.
Правила подсчёта
- На складе доступно то, что лежит, минус отложенное под заказы. Если заказов набрали больше, чем лежит, склад даёт ноль, а не минус.
- Итог
available— сумма доступного по складам. Перепроданный склад не уменьшает остаток других складов. - Остаток не ведётся. Если у артикула не задан остаток, товар продаётся без
ограничения. Тогда
availableравноnull, аin_stockравноtrue, если артикул продаётся. - Остаток задан, но не разложен по складам. Так бывает, когда склады в магазине ещё не завели. По складам витрины тогда приходит остаток артикула как есть (не меньше нуля), а разбивка пустая. У ключа со своими складами такого остатка нет ни на одном из них, и приходят нули.
- Снят с продажи. Если
is_availableу артикулаfalse, тоin_stockиpreorderравныfalse, сколько бы товара ни лежало. - Под заказ.
preorderравноtrue, когда артикул продаётся, товара нет, но в настройках складов магазина включено «Разрешить заказ, когда товара нет». - Количества приходят строкой с тремя знаками после точки:
"2.250". Товары бывают дробными, их продают метрами и килограммами.
Блок stock у артикула
| Поле | Тип | Что значит |
|---|---|---|
available |
строка или null |
сколько можно продать по складам ключа, три знака после точки. null — остаток не ведётся, товар продаётся без ограничения |
in_stock |
логическое | артикул можно купить прямо сейчас. Это значит, что он продаётся, а остаток больше нуля или не ведётся |
preorder |
логическое | товара нет, но магазин принимает заказ под поставку |
warehouses |
массив | только при настройке «По каждому складу». Пустой, если остаток не ведётся или не разложен по складам |
warehouses[].id |
целое | номер склада из /warehouses |
warehouses[].name |
строка | название склада |
warehouses[].available |
строка | сколько можно продать с этого склада |
"stock": {
"available": "14.500",
"in_stock": true,
"preorder": false,
"warehouses": [
{ "id": 1, "name": "Основной", "available": "12.000" },
{ "id": 3, "name": "Склад во Львове", "available": "2.500" }
]
}
GET /api/v1/inventory
Остатки артикулов опубликованных товаров. Право: inventory:read. Порядок:
по номеру артикула, по возрастанию.
| Параметр | Тип | По умолчанию | Что делает |
|---|---|---|---|
sku_ids |
номера через запятую | нет | остатки только этих артикулов, не больше 100 номеров: sku_ids=2108,2109,2110. Сюда удобно передавать номера из сообщения inventory.changed |
sku |
строка | нет | артикул с таким кодом, точное совпадение |
barcode |
строка | нет | артикул с таким штрихкодом, точное совпадение |
product_id |
целое | нет | артикулы одного товара |
updated_since |
дата и время ISO 8601 | нет | только артикулы, изменённые начиная с этого момента. Изменением считается движение остатка (приход, продажа, резерв, перемещение), правка самого артикула, правка склада, на котором он лежит (название, порядок, включение, витрины, удаление), правка склада, выбранного у какого-нибудь ключа (тогда приходят все артикулы), и переключение настройки «Разрешить заказ, когда товара нет», от которой зависит preorder. Артикул с новой ценой тоже попадёт сюда, хотя цен в этом ответе нет. Правка товара без изменения артикулов, например его характеристик или фото, сюда не попадает |
limit |
целое | 50, а с sku_ids — 100 |
записей на странице, от 1 до 200 |
offset |
целое | 0 | сколько записей пропустить. Вместе с after_id не передаётся |
after_id |
целое | нет | артикулы с номером больше указанного |
locale, storefront_id |
общие параметры. От витрины зависят склады, если ключу не выбраны свои |
Ошибки те же, что у /skus: неизвестный
параметр, product_id не целое положительное число, sku или barcode
списком, неверные updated_since, after_id, limit, offset или
storefront_id. Для sku_ids ошибки те же, что у
/prices: в списке есть что-то кроме
номеров, список пустой или в нём больше 100 разных номеров.
Номера в sku_ids, которых нет или которые принадлежат неопубликованным
товарам, магазин молча пропускает, а повторы считает один раз. Сверяйте ответ
по полю sku_id.
curl "https://shop.example.ua/api/v1/inventory?product_id=1045" \
-H "Authorization: Bearer <ключ>"
Ключ в примере настроен «По каждому складу», склады не выбраны.
{
"data": [
{
"sku_id": 2108,
"product_id": 1045,
"sku": "730601",
"is_available": true,
"available": "14.500",
"in_stock": true,
"preorder": false,
"warehouses": [
{ "id": 1, "name": "Основной", "qty": "15.000", "reserved": "3.000", "available": "12.000" },
{ "id": 3, "name": "Склад во Львове", "qty": "2.500", "reserved": "0.000", "available": "2.500" }
]
},
{
"sku_id": 2109,
"product_id": 1045,
"sku": "730602",
"is_available": true,
"available": "0.000",
"in_stock": false,
"preorder": false,
"warehouses": [
{ "id": 1, "name": "Основной", "qty": "1.000", "reserved": "3.000", "available": "0.000" }
]
},
{
"sku_id": 2110,
"product_id": 1045,
"sku": "730603",
"is_available": true,
"available": null,
"in_stock": true,
"preorder": false,
"warehouses": []
}
],
"meta": { "total": 3, "limit": 50, "offset": 0 },
"links": { "next": null, "prev": null }
}
| Поле | Тип | Что значит |
|---|---|---|
sku_id |
целое | номер артикула |
product_id |
целое | номер товара |
sku |
строка | код артикула |
is_available |
логическое | артикул продаётся. false — владелец снял его с продажи |
available |
строка или null |
сколько можно продать по складам ключа. null — остаток не ведётся |
in_stock |
логическое | артикул можно купить прямо сейчас |
preorder |
логическое | товара нет, но магазин принимает заказ под поставку |
warehouses |
массив | только при настройке «По каждому складу» |
warehouses[].id |
целое | номер склада |
warehouses[].name |
строка | название склада |
warehouses[].qty |
строка | сколько товара лежит на складе |
warehouses[].reserved |
строка | сколько отложено под заказы покупателей |
warehouses[].available |
строка | сколько можно продать: qty минус reserved, не меньше нуля. У выключенного склада всегда "0.000" |
Во втором артикуле примера под заказы отложено больше, чем лежит, поэтому склад даёт ноль. В третьем артикуле остаток не ведётся.
Чтобы держать наличие свежим, раз в несколько минут спрашивайте
/inventory?updated_since=…&after_id=0 со временем прошлой сверки минус
небольшой запас. Как выбрать запас, описано в разделе
«Изменения: updated_since».
Если владелец включил вам сообщение «Изменились остатки», магазин сам
сообщит номера артикулов, у которых изменились остатки на складах вашего
ключа. Эти номера передайте в sku_ids, а полную сверку можно делать реже.
Как принимать такое сообщение, описано на странице
«Сообщения партнёру (вебхуки)».