---
title: "Собрать волну FBS из заданий очереди"
method: POST
path: "/api/v1/marketplace/{platform}/fbs-waves"
tags: ["Marketplace supplies"]
---

# Собрать волну FBS из заданий очереди

`POST /api/v1/marketplace/{platform}/fbs-waves`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/marketplace/{platform}/fbs-waves`
- 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

«Собрать волну» (ERP-2491): выбранные задания делятся по магазинам —
волна на магазин. Задания встают по срочности, мульти получают места
сортировки 1..K. Склад строит лист подбора (ячейки в порядке обхода,
партии по сроку с порогом остаточного срока магазина) и ставит резерв
под волну (stock_reservation). Задание без товара, не сопоставленное,
уже упакованное или уже в волне в волну не входит — оно в skipped с
причиной. Учётных фактов не создаёт, площадку не трогает. Читает
`Idempotency-Key`.

## Path parameters

- `platform` 'ozon' | 'wildberries', required

## Headers

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

## Request body

- MarketplaceFbsWaveCreateInput
  - `postings` object[], required
    - `store_id` string, uuid, required
    - `posting` string, required
  - `product_labels` boolean: Печатать при упаковке этикетку товара

## Response `201`

Волны и задания, не вошедшие в них

- MarketplaceFbsWaveCreateResult
  - `waves` MarketplaceFbsWave[], required
    - `id` string, uuid, required
    - `number` integer, required
    - `platform` 'ozon' | 'wildberries', required
    - `store_id` string, uuid, required
    - `store_name` string, required
    - `warehouse_id` string, uuid, required
    - `company_id` string, uuid, required
    - `status` 'open' | 'done' | 'cancelled', required
    - `supply_id` string, uuid, required
    - `product_labels` boolean, required
    - `reserve_warning` string: Код отказа склада по резерву под волну
    - `reserve_detail_ru` string: Причина отказа резерва словами склада по-русски
    - `reserve_detail_en` string: Причина отказа резерва словами склада по-английски
    - `write_key_issue` string: Код отказа ключа магазина на запись — стикеров и поставки у волны не будет
    - `created_by` integer, nullable, required
    - `created_at` string, date-time, required
    - `closed_at` string, date-time, nullable, required
    - `bins_mode` string, required
    - `items` MarketplaceFbsWaveItem[], required
      - `wave_id` string, uuid, required
      - `platform` 'ozon' | 'wildberries', required
      - `store_id` string, uuid, required
      - `posting` string, required
      - `kind` 'single' | 'multi', required
      - `seq` integer, required
      - `slot` integer, nullable, required: Место сортировки мульти-задания
      - `lines` MarketplaceFbsWaveLine[], required
        - `product_id` string, uuid, required
        - `qty` integer, required
        - `external_product_id` string, required
        - `name` string, required
        - `sku` string, required
        - `offer_id` string, required
      - `status` 'active' | 'packed' | 'removed', required
      - `removed_reason` 'short' | 'manual' | 'gone' | 'cancelled'
      - `created_at` string, date-time, required
      - `packed_at` string, date-time, nullable, required
      - `units` integer, required
      - `done` integer, required
      - `marks_needed` integer, required
      - `marks` integer, required
      - `unmatched` boolean, required
      - `supply_id` string, uuid, required
      - `supply_external_id` string
      - `platform_status` string, required
      - `marks_publication` MarketplaceFbsMarksPublication, required: Передача марок отправления в API площадки (ERP-1857)
        - `status` 'none' | 'not_sent' | 'sent' | 'accepted' | 'rejected', required: none — марок нет; not_sent — не переданы или передача не дошла; sent — площадка проверяет; accepted — приняты; rejected — отклонены
        - `error_code` string: Код отказа последней попытки (marketplace.fbs_marks.*)
        - `reason` string: Слова площадки об отказе без кодов марок и ключей
        - `platform_codes` string[], required: Коды отказа площадки как есть
        - `sent_at` string, date-time, nullable, required
        - `checked_at` string, date-time, nullable, required
        - `stale` boolean, required: Марки менялись после последней передачи
      - `platform_created_at` string, date-time, nullable, required
    - `picks` MarketplaceFbsWavePick[], required
      - `id` string, uuid, required
      - `wave_id` string, uuid, required
      - `seq` integer, required: Место строки в обходе
      - `product_id` string, uuid, required
      - `sku` string, required
      - `name` string, required
      - `bin_id` string, uuid, required
      - `bin_code` string, required
      - `bin_name` string, required
      - `batch_id` string, uuid, required
      - `batch_code` string, required
      - `expires_at` string, date, nullable, required
      - `condition_id` string, uuid, required
      - `qty` integer, required
      - `picked` integer, required
      - `short` integer, required
      - `packed` integer, required
    - `summary` object, required
      - `items` integer, required
      - `singles` integer, required
      - `multi` integer, required
      - `packed` integer, required
      - `removed` integer, required
      - `units` integer, required
      - `to_pick` integer, required
      - `picked` integer, required
      - `short` integer, required
      - `in_supply` integer, required
    - `supply` MarketplaceFbsSupply, required
      - `id` string, uuid, required
      - `platform` 'wildberries', required
      - `store_id` string, uuid, required
      - `store_name` string, required
      - `external_id` string, required: Номер поставки у площадки
      - `name` string, required
      - `origin` 'akeda' | 'platform', required: Кто завёл: Akeda или кабинет площадки
      - `status` 'open' | 'delivered' | 'deleted', required
      - `cargo_type` integer, nullable, required
      - `platform_created_at` string, date-time, nullable, required
      - `delivered_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `synced_at` string, date-time, nullable, required
      - `last_error` string
      - `last_reason` string
      - `orders` object[], required
        - `posting` string, required
        - `source` 'akeda' | 'platform', required
        - `added_at` string, date-time, nullable, required
        - `packed` boolean, required
        - `wave_number` integer
        - `marks_status` 'none' | 'not_sent' | 'sent' | 'accepted' | 'rejected', required
      - `orders_count` integer, required
    - `products` object[], required
      - `product_id` string, uuid, required
      - `sku` string, required
      - `name` string, required
      - `qty` integer, required
      - `picked` integer, required
      - `short` integer, required
      - `packed` integer, required
  - `skipped` object[], required
    - `store_id` string, uuid, required
    - `posting` string, required
    - `reason` 'short' | 'unmatched' | 'packed' | 'taken' | 'gone', required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `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/3c60ded179f2?raw)
