Резервы товаров
Резерв блокирует часть складского количества под заказ. Он относится к конкретному inventory.id, поэтому один и тот же товар на разных складах резервируется отдельно.
Вернуться к разделу: управление складом.
Резервы создаются и обновляются внутри сценария заказа. Отдельных методов POST, PUT и DELETE для /api/reservations нет.
Как работает резерв
- Клиент или сотрудник добавляет складскую позицию в заказ.
- Gigma создаёт активный резерв с количеством, ценой и сроком
expired_at. - Активный резерв уменьшают поле
availableв таблице остатков и количество в клиентском каталоге. - После наступления
expired_atфоновая команда переводит резерв в неактивное состояние. - При удалении позиции из заказа связанный резерв освобождается вместе с ней.
доступно = inventory.quantity − сумма активных reservations.quantity Что можно сделать через API
| Задача | Способ |
|---|---|
| Посмотреть резервы проекта | GET /api/tables/reservations |
| Найти резервы заказа | передать order_id |
| Освободить резерв до истечения | удалить соответствующую позицию заказа |
| Создать или изменить резерв вручную | не поддерживается |
Получить таблицу резервов
- Метод
- GET
- URL
https://api.gigma.ru/api/tables/reservations- Авторизация
- Bearer сотрудника
- Headers
Authorization: Bearer {token}, Accept: application/json- Успешный ответ
200
Метод возвращает резервы проекта сотрудника, описание колонок и пагинацию.
Параметры запроса
order_id(integer, необязательный) — ID заказа.page(integer, необязательный) — номер страницы, по умолчанию1.per_page(integer, необязательный) — количество строк, по умолчанию10.
Параметры date_from и date_to текущий backend не обрабатывает. Поисковый параметр query объявлен в валидаторе, но не используйте его в новой интеграции: поиск резервов по тексту сейчас не имеет стабильного поля.
Пример запроса
GET /api/tables/reservations?order_id=581&page=1&per_page=50 HTTP/1.1
Host: api.gigma.ru
Authorization: Bearer <employee_token>
Accept: application/json Ответ
{
"columns": [
{
"id": 178,
"table_id": 22,
"order": 0,
"key": "code",
"has_icon": 0,
"text": "Код"
},
{
"id": 181,
"table_id": 22,
"order": 3,
"key": "name",
"has_icon": 1,
"text": "Наименование"
},
{
"id": 185,
"table_id": 22,
"order": 7,
"key": "quantity",
"has_icon": 0,
"text": "Количество"
}
],
"reservations": [
{
"id": {
"icon": null,
"value": 193,
"url": "/inventories/list-inventories/845"
},
"code": {
"icon": null,
"value": 19301,
"url": "/inventories/list-inventories/845"
},
"created_at": "2026-08-22T07:30:00.000000Z",
"name": {
"icon": "https://api.gigma.ru/storage/uploads/default.svg",
"value": "Микрофон",
"link": "/inventories/list-inventories/845"
},
"counterparty": {
"icon": "https://api.gigma.ru/storage/uploads/default.svg",
"value": "ООО «Клиент»",
"link": "/counterparty/list-counterparty/121"
},
"warehouse": {
"icon": "https://api.gigma.ru/storage/uploads/default.svg",
"value": "Основной склад",
"link": "/warehouses/list-warehouses/12"
},
"source": {
"icon": "https://api.gigma.ru/storage/uploads/default.svg",
"value": "Интернет-магазин",
"link": "/ecommerce/list-ecommerce/23"
},
"quantity": 3,
"price": "1490.00",
"expired_at": "2026-08-22 09:30:00",
"is_active": "Да",
"creator": "-"
}
],
"pagination": {
"total": 1,
"per_page": 50,
"current_page": 1,
"last_page": 1,
"from": 1,
"to": 1
}
} Важные поля:
id.value— ID резерва;id.url— ссылка административного интерфейса на складскую позицию, а не API-адрес;quantity— заблокированное количество;expired_at— срок действия;is_active— участвует ли резерв в расчёте доступного количества;source— приложение, из которого пришёл заказ.
Ошибки
401— Bearer отсутствует или недействителен.422—order_idне найден или параметры запроса не прошли валидацию.
Освободить резерв
Отдельного DELETE /api/reservations/{reservation} нет. Чтобы освободить резерв до expired_at, удалите связанную позицию заказа:
DELETE /api/orders/{order}/nomenclatures/{order_item} HTTP/1.1
Host: api.gigma.ru
Authorization: Bearer <employee_token>
Accept: application/json В этом URL:
order— ID заказа;order_item— ID позиции заказа (OrderNomenclature.id), а неnomenclature.idи неreservation.id.
Сначала получите позиции нужного заказа и убедитесь, что удаляете правильную строку. Контракты работы с заказом находятся в разделе Заказы.
Что проверять при расхождении количества
Если available меньше ожидаемого:
- получите остаток через
GET /api/tables/inventories; - сравните
quantity,reservedиavailable; - запросите резервы по
order_id, если известен заказ; - проверьте
is_activeиexpired_at; - убедитесь, что фоновая команда обработки просроченных резервов выполняется по расписанию.