---
title: "Кто держит товар, которого не хватило продаже"
method: GET
path: "/api/v1/stock/sales/{id}/reservation/holders"
tags: ["Stock purchasing"]
---

# Кто держит товар, которого не хватило продаже

`GET /api/v1/stock/sales/{id}/reservation/holders`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/sales/{id}/reservation/holders`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Для каждой товарной строки продажи, у которой остаток к отгрузке не обеспечен бронью (short_qty > 0, ERP-2581), — склад (склад её брони по товару, иначе склад, который подобрал бы «Зарезервировать»), сколько свободно на нём (free_qty — отчёт остатков, как у «Зарезервировать») и holders: каждая живая бронь того же юрлица на этом складе с остатком по товару больше нуля, кроме броней самой продажи. kind: order (бронь другой продажи — order_id, номер продажи и контрагент), wave (бронь волны сборки — wave_id), manual (бронь руками — комментарий и срок документа, если есть). Обеспеченным продажам lines пуст. Комплект без остатка держится компонентами: необеспеченный комплект даёт по строке на каждый компонент, которого не хватает (product_id — компонент, kit_product_id — комплект, short_qty — нехватка компонента); бронь забирают по компоненту. Полностью обеспеченный комплект нехваткой не показывается.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Response `200`

Нехватка брони по строкам продажи и держатели товара

- StockOrderReservationHolders
  - `order_id` string, uuid, required
  - `lines` StockOrderShortageHolders[], required
    - `line_id` string, uuid, required
    - `product_id` string, uuid, required
    - `title` string, required
    - `unit` string
    - `kit_product_id` string, uuid
    - `warehouse_id` string, uuid, required
    - `warehouse_name` string
    - `short_qty` string, required: Сколько строке не хватает брони; у строки компонента комплекта — сколько не хватает самого компонента
    - `free_qty` string, required: Свободно на складе — тем же отчётом остатков, что у «Зарезервировать»
    - `holders` StockOrderReservationHolder[], required
      - `kind` 'order' | 'wave' | 'manual', required
      - `reservation_id` string, uuid, required
      - `number` string, required: Номер документа брони
      - `date` string, required: Дата документа брони
      - `qty` string, required: Остаток брони по этому товару
      - `order_id` string, uuid
      - `order_number` string: Только у kind=order
      - `contact_name` string: Контрагент продажи; только у kind=order
      - `wave_id` string, uuid
      - `comment` string: Комментарий документа; только у kind=manual
      - `expires_at` string: Срок брони; только у kind=manual

## Other responses

- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
