---
title: "Отгрузить по продаже"
method: POST
path: "/api/v1/stock/sales/{id}/shipment"
tags: ["Stock purchasing"]
---

# Отгрузить по продаже

`POST /api/v1/stock/sales/{id}/shipment`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/sales/{id}/shipment`
- 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

«Отгрузить» дверью склада без документооборота: создаётся и сразу проводится отгрузка склада с реквизитом «продажа» — та же сборка, что у фасада документооборота; резерв продажи гасится ею же. Количество по строке не больше остатка к отгрузке, строки без количества пропускаются, без строк — отгружается весь остаток. warehouse_id можно не передавать: склад выбирает сервер тем же правилом, что ship_warehouse у GET …/shipping (для отгружаемых количеств); не нашёл — 400 с просьбой выбрать склад. Черновик продажи дверь сначала подтверждает (КЦ § 2.1) и пишет «Продажи и закупки» +; фасад документооборота /docflow/sales/{id}/shipment зовёт эту же дверь. Читает `Idempotency-Key` — повтор с тем же ключом отдаёт ту же отгрузку.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required
- `Idempotency-Key` string

## Request body

- StockOrderShipInput: warehouse_id необязателен — без него склад выбирает сервер тем же правилом, что ship_warehouse
  - `warehouse_id` string, uuid
  - `date` string: Дата отгрузки; пусто — текущая бизнес-дата
  - `comment` string
  - `assemble` boolean: Собрать, а не провести: черновик отгрузки — сборка. Строка немаркированного товара получает qty — сколько нужно и picked_qty 0 (скан прибавляет к собранному, проведение отгружает собранное), маркированного — собирается марками. Черновик по продаже уже есть — вернётся он
  - `lines` object[], required
    - `item_id` string, uuid, required
    - `quantity` string, required

## Response `201`

Проведённая отгрузка по продаже

- StockOrderShipment
  - `id` string, uuid, required
  - `order_id` string, uuid, required
  - `number` string, required
  - `date` string, required
  - `status` string, required
  - `warehouse_id` string, uuid
  - `deal` string, uuid
  - `lines` StockOrderShipmentLine[], required
    - `product_id` string, uuid, required
    - `qty` string, required
  - `needed_qty` string: Только у черновика сборки (ERP-2423): сколько нужно собрать по строкам немаркированного товара (picked_qty строк), в базовой единице. Нет поля — сборка марками, черновик до ERP-2423 или проведённая отгрузка
  - `picked_qty` string: Только у черновика сборки (ERP-2423): сколько собрано по тем же строкам, в базовой единице. Не меньше needed_qty — строки собраны

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния
- `422`: Idempotency-Key уже использован для другого запроса: другое тело, другой адрес или другая операция. Код `idempotency.key_mismatch`; сохранённый ответ не раскрывается. Для новой команды берут новый ключ.
- `503`: Хранилище ключей идемпотентности недоступно, команда с заголовком Idempotency-Key не выполнялась. Код `idempotency.unavailable`; Retry-After говорит, когда повторить.

---

[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)
