Подготовка заказа
Метод доступен для моделей: FBS, Экспресс и DBS.
Если вы используете API-Key-токен, для вызова метода необходим один из доступов в списке
- inventory-and-order-processing — Обработка заказов и учёт товаров
- all-methods — Полное управление кабинетом
Подходит и для DBS
Запрос предназначен для работы с FBS-заказами, но вы можете использовать его для обработки DBS-заказов, если это удобно.
Позволяет выполнить три операции:
- передать Маркету информацию о распределении товаров по коробкам;
- передать Маркету коды маркировки для товаров;
- удалить товар из заказа, если его не оказалось на складе.
Если нужно что-то поправить в переданных данных, просто повторите запрос — это можно делать сколько угодно раз до перевода заказа в статус Готов к отгрузке. ⚠️ Если вы меняете раскладку уже после печати и расклейки ярлыков, не забудьте перепечатать их и наклеить заново.
Как передать информацию о распределении товаров
В этом запросе вам нужно передать Маркету список коробок и указать, какие именно товары лежат в каждой из них. Коробки могут быть двух типов:
- 
Содержащие товары целиком. Такая коробка может содержать сколько угодно единиц любых товаров. 
- 
Содержащие часть товара. Такие коробки содержат по одной части одного товара. Например, одна содержит внешний блок кондиционера, а другая — внутренний блок. 
⚠️ Одна коробка не может содержать и товары целиком, и части товаров.
Как передавать коды маркировки
Маркировка товаров в системе «Честный ЗНАК» необязательна для заказов от физических лиц
Для заказов от бизнеса все еще нужно передавать коды маркировки.
Если в заказе есть товары, подлежащие маркировке, в запросе нужно передать соответствующие уникальные коды. Что такое маркировка
Принимаются коды следующих типов:
- Коды в системе «Честный ЗНАК» или «ASL BELGISI» (для продавцов Market Yandex Go).
- УИН для ювелирных изделий.
- РНПТ и ГТД для импортных прослеживаемых товаров.
Для каждой позиции в заказе, требующей маркировки, нужно передать список кодов — по одному для каждой единицы товара. Например, если в заказе две пары тапочек и одна пара туфель, получится список из двух кодов для первой позиции и список из одного кода для второй.
Если товар едет в нескольких коробках, код маркировки нужно передать для каждой из них.
Для заказов, в которых есть ювелирные изделия или товары с маркировкой в системе «Честный ЗНАК»
Заказ перейдет в статус READY_TO_SHIP, только когда:
- Вы передадите Маркету УИНы по каждому ювелирному изделию в заказе и коды в системе «Честный ЗНАК» по всем товарам в заказе, для которых обязательна эта маркировка.
- Все коды маркировки успешно пройдут проверку. Как получить статусы проверки
Как удалить товар из заказа
Чтобы удалить товар из заказа:
- Добавьте в запрос allowRemove: true.
- Передайте распределение по коробкам без товара, который нужно удалить.
Удаление нельзя отменить
Эта операция необратима: покупатель сразу получит уведомление, а состав заказа изменится.
Чтобы удалить позицию целиком, не передавайте соответствующий OrderBoxLayoutItemDTO. Чтобы уменьшить количество товара, передайте уменьшенное значение в поле fullCount.
Нельзя удалить или уменьшить количество товара, если он:
- добавлен по акции;
- составляет 99% стоимости заказа;
- единственный товар в заказе.
Если вы не можете отгрузить такой товар, отмените заказ. Для этого отправьте запрос методом PUT v2/campaigns/{campaignId}/orders/{orderId}/status и передайте статус заказа CANCELLED с причиной отмены SHOP_FAILED.
Увеличить заказ нельзя
С помощью запроса нельзя увеличить количество одинаковых товаров, добавить новые товары в заказ или заменить один товар другим.
Примеры
Товар умещается в коробку
Вот как будет выглядеть запрос, если в одной коробке едут:
- три единицы одного товара, требующего маркировки;
- одна единица другого товара, не требущего маркировки.
{
    "boxes": [
        {
            "items": [
                {
                    "id": 123456,
                    "fullCount": 3,
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        },
                        {
                            "cis": "010304109478gftJ14545762!\u001dhGt264"
                        },
                        {
                            "cis": "010304109478fRs28323ks23!\u001dhet201"
                        }
                    ]
                },
                {
                    "id": 654321,
                    "fullCount": 1
                }
            ]
        }
    ]
}
Товар едет в разных коробках
Вот как будет выглядеть запрос, если товар едет в двух коробках:
{
    "boxes": [
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 1,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        },
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 2,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        }
    ]
}
Одинаковые товары, где каждый едет в нескольких коробках
Вот как будет выглядеть запрос, если каждый из двух одинаковых товаров едет в двух коробках:
{
    "boxes": [
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 1,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        },
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 2,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        },
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 1,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        },
        {
            "items": [
                {
                    "id": 123456,
                    "partialCount": {
                        "current": 2,
                        "total": 2
                    },
                    "instances": [
                        {
                            "cis": "01030410947874432155Qbag!\u001d93Zjqw"
                        }
                    ]
                }
            ]
        }
    ]
}
| ⚙️ Лимит: 100 000 запросов в час | 
|---|
Request
PUT
https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/{orderId}/boxes
Path parameters
| Name | Description | 
| campaignId* | Type: integer<int64> Идентификатор кампании. Его можно узнать с помощью запроса GET v2/campaigns или найти в кабинете продавца на Маркете — нажмите на иконку вашего аккаунта → Настройки и в меню слева выберите API и модули: 
 ⚠️ Не передавайте вместо него идентификатор магазина, который указан в кабинете продавца на Маркете рядом с названием магазина и в некоторых отчетах.
 Min value:  | 
| orderId* | Type: integer<int64> Идентификатор заказа. | 
Body
application/json
{
    "boxes": [
        {
            "items": [
                {
                    "id": 0,
                    "fullCount": 0,
                    "partialCount": {
                        "current": 0,
                        "total": 0
                    },
                    "instances": [
                        {
                            "cis": "string",
                            "uin": "string",
                            "rnpt": "string",
                            "gtd": "string",
                            "countryCode": "RU"
                        }
                    ]
                }
            ]
        }
    ],
    "allowRemove": false
}
| Name | Description | 
| boxes* | Type: OrderBoxLayoutDTO[] Список коробок. Min items:  | 
| allowRemove | Type: boolean Передайте  Default:  | 
OrderBoxLayoutDTO
Информация о коробке.
| Name | Description | 
| items* | Type: OrderBoxLayoutItemDTO[] Список товаров в коробке. Если в коробке едет часть большого товара, в списке может быть только один пункт.
 Min items:  | 
OrderBoxLayoutItemDTO
Информация о товаре в коробке.
| Name | Description | 
| id* | Type: integer<int64> Идентификатор товара в заказе. Он приходит в ответе на запрос GET v2/campaigns/{campaignId}/orders/{orderId} — параметр  | 
| fullCount | Type: integer<int32> Количество единиц товара в коробке. Используйте это поле, если в коробке поедут целые товары, не разделенные на части. Не используйте это поле одновременно с  Min value:  | 
| instances | Type: BriefOrderItemInstanceDTO[] Переданные вами коды маркировки. Заполните только одно поле в зависимости от того, в какой системе маркирован товар. Подробно о работе с маркируемыми товарами рассказано в Справке Маркета для продавцов. Min items:  | 
| partialCount | Type: OrderBoxLayoutPartialCountDTO Часть товара в коробке. Используйте это поле, если в коробке поедет часть большого товара. Не используйте это поле одновременно с  | 
BriefOrderItemInstanceDTO
Идентификатор единицы товара.
Заполните только одно поле в зависимости от того, в какой системе маркирован товар.
Подробно о работе с маркируемыми товарами рассказано в Справке Маркета для продавцов.
| Name | Description | 
| cis | Type: string Код идентификации единицы товара в системе «Честный ЗНАК» или «ASL BELGISI» (для продавцов Market Yandex Go). Не экранируйте косую черту в коде символа-разделителя  ✅  ❌  Косые черты и кавычки в других местах экранируйте по правилам JSON:  | 
| countryCode | Type: string Страна производства в формате ISO 3166-1 alpha-2. Как получить Example:  Min length:  Max length:  Pattern:  | 
| gtd | Type: string Грузовая таможенная декларация. Представляет собой строку из трех чисел, разделенных косой чертой: ХХХХХХХХ/ХХХХХХ/ХХХХХХХ. Первая часть — код таможни, которая зарегистрировала декларацию на ввезенные товары. Далее — дата и номер декларации. | 
| rnpt | Type: string Регистрационный номер партии товара. Представляет собой строку из четырех чисел, разделенных косой чертой: ХХХХХХХХ/ХХХХХХ/ХХХХХХХ/ХХХ. Первая часть — код таможни, которая зарегистрировала декларацию на партию товара. Далее — дата, номер декларации и номер маркированного товара в декларации. | 
| uin | Type: string Уникальный идентификационный номер ювелирного изделия. Представляет собой число из 16 цифр. | 
OrderBoxLayoutPartialCountDTO
Информация о части товара в коробке.
| Name | Description | 
| current* | Type: integer<int32> Номер части, начиная с 1. Min value:  | 
| total* | Type: integer<int32> На сколько всего частей разделен товар. Min value:  | 
Responses
200 OK
В ответ придет переданная раскладка с идентификаторами коробок — они понадобятся для запроса ярлыков.
Body
application/json
{
    "status": "OK",
    "result": {
        "boxes": [
            {
                "items": [
                    {
                        "id": 0,
                        "fullCount": 0,
                        "partialCount": {
                            "current": 0,
                            "total": 0
                        },
                        "instances": [
                            {
                                "cis": "string",
                                "uin": "string",
                                "rnpt": "string",
                                "gtd": "string",
                                "countryCode": "RU"
                            }
                        ]
                    }
                ],
                "boxId": 0
            }
        ]
    }
}
| Name | Description | 
| status* | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
| result | Type: OrderBoxesLayoutDTO Распределение товаров по коробкам. | 
ApiResponseStatusType
Тип ответа. Возможные значения:
- OK— ошибок нет.
- ERROR— при обработке запроса произошла ошибка.
| Type | Description | 
| Enum:  | 
OrderBoxesLayoutDTO
Распределение товаров по коробкам.
| Name | Description | 
| boxes* | Type: EnrichedOrderBoxLayoutDTO[] Список коробок. | 
EnrichedOrderBoxLayoutDTO
Информация о коробке.
| Name | Description | 
| items* | Type: OrderBoxLayoutItemDTO[] Список товаров в коробке. Если в коробке едет часть большого товара, в списке может быть только один пункт.
 Min items:  | 
| boxId | Type: integer<int64> Идентификатор коробки. | 
400 Bad Request
Запрос содержит неправильные данные. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
ApiErrorDTO
Общий формат ошибки.
| Name | Description | 
| code* | Type: string Код ошибки. | 
| message | Type: string Описание ошибки. | 
401 Unauthorized
В запросе не указаны данные для авторизации. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
403 Forbidden
Данные для авторизации неверны или доступ к ресурсу запрещен. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
404 Not Found
Запрашиваемый ресурс не найден. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
420 Method Failure
Превышено ограничение на доступ к ресурсу. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
500 Internal Server Error
Внутренняя ошибка Маркета. Подробнее об ошибке
Body
application/json
{
    "status": "OK",
    "errors": [
        {
            "code": "string",
            "message": "string"
        }
    ]
}
| Name | Description | 
| errors | Type: ApiErrorDTO[] Список ошибок. Min items:  | 
| status | Type: ApiResponseStatusType Тип ответа. Возможные значения: 
 Enum:  | 
No longer supported, please use an alternative and newer version.
Значение cis должно соответствовать регулярному выражению ^(?=.{1,256}$)\u001D?(\(?01\)?\d{14}\(?21\)?([!-~]{6,8}|[!-~]{13}|[!-~]{20})(\u001D\(?240\)?.{1,30})?\u001D\(?9[1,3]\)?.+)$.
Без криптохвоста — ^(?=[!-~]{1,256}$)(\(?01\)?\d{14}\(?21\)?(.{6,8}|.{13}|.{20}))$.