Заказы

Каждая операция ниже сгенерирована из OpenAPI v2 и содержит параметры, поля запроса, поля ответа, ошибки и примеры.

Документы, партии и фактические остатки

stocks.physical / stocks.aggregateМассивы складских итогов: warehouse_id, warehouse_name, stockTotal, stockReserved, stockAvailable. stocks.available_by_warehouse — объект с ключами ID складов. Не воспринимайте эти три поля как одинаковую структуру.
GET /api/v2/products/{id}/stock-lotsФизически размещённый товар по партиям и датам. Резерв без конкретной партии нельзя вычитать из произвольно выбранной партии. Сверяйте единицы количества и склад в ответе.
accepted_lotsФактические партии приёмки. Ожидание, фактическая приёмка и размещение — разные показатели. Их расхождение само по себе не означает ошибку API.
requested_lot / fulfillment_lotsВ строке заказа requested_lot описывает требование, fulfillment_lots — фактический подбор; picked_quantity — подобранное количество. Несколько фактических партий нельзя сводить к одной дате.
movement_type / operationПодбор может давать пару снятия резерва и физического списания. Различайте operation; не считайте обе строки двумя списаниями. Перемещения объединяются через movement_group_id; transfer_kind уточняет вид.
GET /api/v2/closed-boxesРеальные закрытые короба с уникальным SSCC: balance=1, balance_unit=box. Штрихкод типа упаковки из products не является уникальным SSCC. Открытые, отгруженные и только ожидаемые короба не входят в текущий закрытый остаток.
acceptance_dateПри создании обычной/возвратной приёмки (type_id=1/2) текущий обработчик ставит серверное now(), даже если передана acceptance_date. Изменение существующей приёмки принимает дату. Создание type_id=3 использует отдельный cross-dock сервис. created_at/updated_at — технические метки, не дата документа.
LifecycleОтмена приёмки — отдельная команда cancel с проверкой состояния; она не равна удалению. Для строк используйте /lines, а устаревшие /offers сохраняются для совместимости. Подробные ограничения смотрите у операции.

Заказы

GET /api/v2/orders

Получить список заказов

operationIdlistOrders
РазделЗаказы
БезопасностьbearerAuth

Возвращает заказы, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Request include=status_history to receive chronological WMS status transitions with changed_at (ISO 8601 and explicit timezone offset), source and inferred. status_history_meta reports availability and whether the last event matches the current status; surviving logs do not guarantee a complete history. send_date is the stored order date field and may come from import, manual input or integration processing; it is not a universal physical carrier-handover timestamp. Status transitions and shipment-document closure must be interpreted as separate recorded events. Dedicated picked_at, packed_at and shipped_at milestones are not exposed.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
page query нет integer:int64 form true min: 1 Номер страницы. Этот фильтр также можно передать как filter[page], если это поддерживает Laravel query adapter. 1
per_page query нет integer:int64 form true min: 1
max: 500
Количество записей на странице. По умолчанию 50; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. 50
sort query нет string form false pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, order_date, send_date, sum, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. "-id"
include query нет string form false Связанные сущности через запятую. Допустимые значения: offers, contact, delivery, comments, consumables, status_history. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. "offers,contact,delivery,comments,consumables,status_history"
id query нет integer:int64 form true min: 1 Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. 1001
external_id query нет string form true Фильтр по external_id с точным совпадением. Этот фильтр также можно передать как filter[external_id], если это поддерживает Laravel query adapter. "EXT-10045"
status_id query нет integer:int64 form true min: 1 Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. 1
warehouse_id query нет integer:int64 form true min: 1 Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. 42
shop_id query нет integer:int64 form true min: 1 Фильтр по shop_id с точным совпадением. Этот фильтр также можно передать как filter[shop_id], если это поддерживает Laravel query adapter. 12
type_id query нет integer:int64 form true min: 1 Фильтр по type_id с точным совпадением. Этот фильтр также можно передать как filter[type_id], если это поддерживает Laravel query adapter. 1
source_id query нет integer:int64 form true min: 1 Фильтр по source_id с точным совпадением. Этот фильтр также можно передать как filter[source_id], если это поддерживает Laravel query adapter. 1
customer_type query нет integer:int64 form true min: 1 Фильтр по customer_type с точным совпадением. Этот фильтр также можно передать как filter[customer_type], если это поддерживает Laravel query adapter. 1
company_id query нет integer:int64 form true min: 1 Фильтр по company_id с точным совпадением. Этот фильтр также можно передать как filter[company_id], если это поддерживает Laravel query adapter. 7
is_cod query нет boolean form true Фильтр по is_cod с точным совпадением. Этот фильтр также можно передать как filter[is_cod], если это поддерживает Laravel query adapter. false
order_date_from query нет string:date form true Нижняя включительная граница даты для order_date. Этот фильтр также можно передать как filter[order_date_from], если это поддерживает Laravel query adapter. "2026-07-14"
order_date_to query нет string:date form true Верхняя включительная граница даты для order_date. Этот фильтр также можно передать как filter[order_date_to], если это поддерживает Laravel query adapter. "2026-07-14"
send_date_from query нет string:date form true Нижняя включительная граница даты для send_date. Этот фильтр также можно передать как filter[send_date_from], если это поддерживает Laravel query adapter. "2026-07-14"
send_date_to query нет string:date form true Верхняя включительная граница даты для send_date. Этот фильтр также можно передать как filter[send_date_to], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_from query нет string:date form true Нижняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_from], если это поддерживает Laravel query adapter. "2026-07-14"
created_at_to query нет string:date form true Верхняя включительная граница даты для created_at. Этот фильтр также можно передать как filter[created_at_to], если это поддерживает Laravel query adapter. "2026-07-14"
updated_at_from query нет string form true pattern: ^\d{4}-\d{2}-\d{2}(?: \d{2}:\d{2}:\d{2})?$ Lower inclusive date or date-time boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. Use YYYY-MM-DD HH:mm:ss for an exact inclusive timestamp in the application timezone; YYYY-MM-DD starts at midnight. "2026-07-14 10:30:00"
updated_at_to query нет string form true pattern: ^\d{4}-\d{2}-\d{2}(?: \d{2}:\d{2}:\d{2})?$ Upper inclusive date or date-time boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. Use YYYY-MM-DD HH:mm:ss for an exact inclusive timestamp in the application timezone; YYYY-MM-DD includes the entire day. "2026-07-14 10:30:00"
sum_from query нет number:float form true Нижняя включительная числовая граница для sum. Этот фильтр также можно передать как filter[sum_from], если это поддерживает Laravel query adapter. 48.58
sum_to query нет number:float form true Верхняя включительная числовая граница для sum. Этот фильтр также можно передать как filter[sum_to], если это поддерживает Laravel query adapter. 48.58

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<Order>
data[] нет Order Исходящий складской заказ. Опциональные связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data[].id да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].external_id нет string | null "ORD-100245"
data[].domain_id нет integer:int64 | null min: 1 3
data[].type_id нет integer:int64 | null 1
data[].shop_id нет integer:int64 | null min: 1 12
data[].warehouse_id нет integer:int64 | null min: 1 42
data[].status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data[].status нет object | null
data[].status.id да integer:int64 20
data[].status.name да string "Created"
data[].status.color нет string | null "#2457c5"
data[].status.background_color нет string | null "#eaf0ff"
data[].order_date нет string:date | null "2026-07-14"
data[].send_date нет string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data[].source_id нет integer:int64 | null min: 1 1
data[].customer_type нет integer:int64 | null 1
data[].is_cod нет boolean true
data[].amounts нет OrderAmounts
data[].amounts.shipping_price нет number:float | null 8.6
data[].amounts.shipping_cost нет number:float | null 0
data[].amounts.sum нет number:float | null 39.98
data[].amounts.cod_sum нет number:float | null 48.58
data[].company_id нет integer:int64 | null min: 1 7
data[].marking да OrderMarking Marking data expected for products in the order.
data[].marking.required да boolean Whether the order contains products that require marking data after picking. true
data[].marking.types да array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data[].marking.types[] нет string "chestny_znak"
data[].contact нет object | null
data[].contact.first_name нет string | null "Ivan"
data[].contact.middle_name нет string | null "Ivanovich"
data[].contact.last_name нет string | null "Petrov"
data[].contact.phone нет string | null "+359888123456"
data[].contact.email нет string:email | null "customer@example.com"
data[].contact.country_id нет integer:int64 | null min: 1 100
data[].contact.city_id нет integer:int64 | null min: 1 200
data[].contact.postcode нет string | null "1000"
data[].contact.latitude нет number:float | null min: -90
max: 90
42.6977
data[].contact.longitude нет number:float | null min: -180
max: 180
23.3219
data[].contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data[].delivery нет object | null
data[].delivery.service_id нет integer:int64 | null min: 1 1
data[].delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data[].delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data[].delivery.status нет string | null "created"
data[].delivery.track_number нет string | null "CDEK-123456789"
data[].delivery.pickup_point_id нет string | null "SOFIA-01"
data[].delivery.source_id нет string | null "cdek-15"
data[].delivery.tariff_code нет integer:int64 | null 136
data[].delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data[].delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data[].delivery.delivery_date нет string:date | null "2026-07-16"
data[].delivery.delivery_time_start нет string:time | null "09:00:00Z"
data[].delivery.delivery_time_end нет string:time | null "18:00:00Z"
data[].comments нет object | null
data[].comments.delivery_service_text нет string | null "Call before delivery"
data[].comments.inner_text нет string | null "VIP customer"
data[].offers нет array<OrderLineEmbedded>
data[].offers[] нет OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].offers[].id да integer:int64 readOnly min: 1 7001
data[].offers[].product_id нет integer:int64 | null min: 1 1201
data[].offers[].quantity нет number:float | null min: 0 2
data[].offers[].estimated_price нет number:float | null 19.5
data[].offers[].price нет number:float | null 19.99
data[].offers[].expiration_date нет string:date | null "2027-01-15"
data[].offers[].batch нет string | null maxLength: 15 "LOT-2026"
data[].offers[].operation_user_id нет integer:int64 | null min: 1 9
data[].offers[].product нет object | null
data[].offers[].product.id да integer:int64 readOnly min: 1 1201
data[].offers[].product.name да string "Coffee 250g"
data[].offers[].product.external_id нет string | null "EXT-10045"
data[].offers[].reservation нет OrderReservationLine Reservation totals for one order line.
data[].offers[].reservation.required_qty да number:float 3
data[].offers[].reservation.reserved_qty да number:float 1
data[].offers[].reservation.unreserved_qty да number:float 2
data[].offers[].reservation.missing_qty да number:float 2
data[].offers[].reservation.status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items нет array<OrderReservationItem>
data[].offers[].reservation_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].offers[].reservation_items[].offer_id да integer:int64 min: 1 1201
data[].offers[].reservation_items[].offer_name нет string | null "Coffee 250g"
data[].offers[].reservation_items[].offer_article нет string | null "ART-001245"
data[].offers[].reservation_items[].offer_sku нет string | null "SKU-001245"
data[].offers[].reservation_items[].required_qty да number:float 3
data[].offers[].reservation_items[].reserved_qty да number:float 1
data[].offers[].reservation_items[].unreserved_qty да number:float 2
data[].offers[].reservation_items[].missing_qty да number:float 2
data[].offers[].reservation_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].offers[].reservation_items[].source_order_offer_ids да array<integer:int64>
data[].offers[].reservation_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data[].offers[].reservation_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].offers[].reservation_items[].expanded_from_composite да boolean false
data[].offers[].reservation_items[].expanded_from_quant да boolean false
data[].offers[].reservation_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data[].offers[].reservation_items[].quant_base_multiplicity нет number:float | null 6
data[].offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].offers[].production_date нет string:date | null "2026-01-15"
data[].offers[].requested_lot нет WarehouseLot
data[].offers[].requested_lot.batch да string | null "LOT-2026"
data[].offers[].requested_lot.production_date да string:date | null "2026-01-15"
data[].offers[].requested_lot.expiration_date да string:date | null "2027-01-15"
data[].offers[].picked_quantity нет number:float min: 0 2
data[].offers[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].offers[].fulfillment_lots[] нет OrderFulfillmentLot
data[].offers[].fulfillment_lots[].batch да string | null "LOT-2026"
data[].offers[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data[].offers[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data[].offers[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data[].offers[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data[].offers[].fulfillment_lots[].quantity да number:float min: 0 2
data[].reservation нет OrderReservation Reservation readiness and shortages calculated for the order.
data[].reservation.ready да boolean false
data[].reservation.reason да string | null "Not all order products are reserved."
data[].reservation.expected_total да number:float 3
data[].reservation.reserved_total да number:float 1
data[].reservation.unreserved_total да number:float 2
data[].reservation.missing_total да number:float 2
data[].reservation.missing_items да array<OrderReservationItem>
data[].reservation.missing_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data[].reservation.missing_items[].offer_id да integer:int64 min: 1 1201
data[].reservation.missing_items[].offer_name нет string | null "Coffee 250g"
data[].reservation.missing_items[].offer_article нет string | null "ART-001245"
data[].reservation.missing_items[].offer_sku нет string | null "SKU-001245"
data[].reservation.missing_items[].required_qty да number:float 3
data[].reservation.missing_items[].reserved_qty да number:float 1
data[].reservation.missing_items[].unreserved_qty да number:float 2
data[].reservation.missing_items[].missing_qty да number:float 2
data[].reservation.missing_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data[].reservation.missing_items[].source_order_offer_ids да array<integer:int64>
data[].reservation.missing_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data[].reservation.missing_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data[].reservation.missing_items[].expanded_from_composite да boolean false
data[].reservation.missing_items[].expanded_from_quant да boolean false
data[].reservation.missing_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data[].reservation.missing_items[].quant_base_multiplicity нет number:float | null 6
data[].reservation.error да boolean false
data[].consumables нет array<OrderConsumable>
data[].consumables[] нет OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data[].consumables[].id да integer:int64 min: 1 301
data[].consumables[].order_id да integer:int64 min: 1 8101
data[].consumables[].product_id да integer:int64 min: 1 1202
data[].consumables[].warehouse_id да integer:int64 | null min: 1 734
data[].consumables[].place_id да integer:int64 | null min: 1 501
data[].consumables[].quantity да number:float 1
data[].consumables[].stock_location_mode да enum enum: placed, unplaced "unplaced"
data[].consumables[].created_at да string:date-time | null "2026-07-14T10:30:00Z"
data[].consumables[].updated_at да string:date-time | null "2026-07-14T10:30:00Z"
data[].status_history нет array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data[].status_history[] нет OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data[].status_history[].status_id да integer:int64 130
data[].status_history[].previous_status_id да integer:int64 | null 110
data[].status_history[].changed_at да string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data[].status_history[].source да enum enum: audit, action_log, inferred "action_log"
data[].status_history[].inferred да boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data[].status_history_meta нет OrderStatusHistoryMeta
data[].status_history_meta.available да boolean At least one event is available. This does not guarantee complete historical coverage. true
data[].status_history_meta.current_status_matches_history да boolean The last available event has the current order status. False also when history is empty. true
links да PaginationLinks
links.first да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=1"
links.last да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
links.prev да string:uri | null
links.next да string:uri | null "https://betawms.ffcdek.ru/api/v2/orders?page=2"
meta да PaginationMeta
meta.api_version да enum enum: v2 "v2"
meta.current_page да integer:int32 min: 1 1
meta.from да integer:int32 | null min: 1 1
meta.last_page да integer:int32 min: 1 2
meta.path да string:uri "https://betawms.ffcdek.ru/api/v2/orders"
meta.per_page да integer:int32 min: 1 50
meta.to да integer:int32 | null min: 1 50
meta.total да integer:int32 min: 0 73

Примеры ответа

success

{
  "data": [
    {
      "id": 8101,
      "external_id": "ORD-100245",
      "domain_id": 3,
      "type_id": 1,
      "shop_id": 12,
      "warehouse_id": 42,
      "status_id": 20,
      "status": {
        "id": 20,
        "name": "Created",
        "color": "#2457c5",
        "background_color": "#eaf0ff"
      },
      "order_date": "2026-07-14",
      "send_date": "2026-07-15",
      "source_id": 1,
      "customer_type": 1,
      "is_cod": true,
      "amounts": {
        "shipping_price": 8.6,
        "shipping_cost": 0,
        "sum": 39.98,
        "cod_sum": 48.58
      },
      "company_id": 7,
      "marking": {
        "required": true,
        "types": [
          "chestny_znak"
        ]
      },
      "contact": {
        "first_name": "Ivan",
        "middle_name": null,
        "last_name": "Petrov",
        "phone": "+359888123456",
        "email": "customer@example.com",
        "country_id": 100,
        "city_id": 200,
        "postcode": "1000",
        "latitude": 42.6977,
        "longitude": 23.3219,
        "full_address": "1 Vitosha Boulevard, Sofia"
      },
      "delivery": {
        "service_id": 1,
        "delivery_type": "door",
        "is_courier": true,
        "status": "created",
        "track_number": "CDEK-123456789",
        "source_id": "cdek-15",
        "tariff_code": 136,
        "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
        "delivery_date": "2026-07-16",
        "delivery_time_start": "09:00:00Z",
        "delivery_time_end": "18:00:00Z"
      },
      "comments": {
        "delivery_service_text": "Call before delivery",
        "inner_text": "VIP customer"
      },
      "offers": [
        {
          "id": 7001,
          "product_id": 1201,
          "quantity": 2,
          "estimated_price": 19.5,
          "price": 19.99,
          "expiration_date": "2027-01-15",
          "batch": "LOT-2026",
          "operation_user_id": 9,
          "product": {
            "id": 1201,
            "name": "Coffee 250g",
            "external_id": "EXT-10045"
          },
          "created_at": "2026-07-14T09:00:00Z",
          "updated_at": "2026-07-14T09:30:00Z"
        }
      ],
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z",
      "status_history": [
        {
          "status_id": 20,
          "previous_status_id": 10,
          "changed_at": "2026-07-14T12:00:00+03:00",
          "source": "action_log",
          "inferred": false
        }
      ],
      "status_history_meta": {
        "available": true,
        "current_status_matches_history": true
      }
    }
  ],
  "links": {
    "first": "https://betawms.ffcdek.ru/api/v2/orders?page=1",
    "last": "https://betawms.ffcdek.ru/api/v2/orders?page=2",
    "prev": null,
    "next": "https://betawms.ffcdek.ru/api/v2/orders?page=2"
  },
  "meta": {
    "api_version": "v2",
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "https://betawms.ffcdek.ru/api/v2/orders",
    "per_page": 50,
    "to": 50,
    "total": 73
  }
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/orders

Создать заказ

operationIdcreateOrders
РазделЗаказы
БезопасностьbearerAuth

Creates an outbound order with public v2 fields. The order may include contact, delivery, comments, and line items. Server-side validation checks shop and warehouse visibility, rejects system-calculated totals, and applies idempotency when Idempotency-Key is provided.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

CreateOrderRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да CreateOrderPayload
data.type_id да integer:int64 1
data.shop_id да integer:int64 min: 1 12
data.warehouse_id да integer:int64 min: 1 42
data.external_id нет string | null "ORD-100245"
data.group_id нет integer:int64 | null min: 1 100
data.send_date нет string:date | null "2026-07-15"
data.source_id нет integer:int64 | null min: 1 1
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.customer_type нет integer:int64 | null 1
data.is_cod нет boolean true
data.company_id нет integer:int64 | null min: 1 7
data.amounts нет object | null
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.weight нет object | null
data.weight.value нет number:float | null min: 0 250
data.weight.unit да enum enum: g "g"
data.dimensions нет object | null
data.dimensions.x нет number:float | null min: 0 105
data.dimensions.y нет number:float | null min: 0 200
data.dimensions.z нет number:float | null min: 0 32
data.dimensions.unit да enum enum: mm "mm"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"
data.lines нет array<OrderEmbeddedLineCreatePayload>
data.lines[] нет OrderEmbeddedLineCreatePayload Payload строки внутри создания заказа. Товар определяется по product_id или product_external_id.
data.lines[] нет object
data.lines[] нет object

Примеры запроса

default

{
  "data": {
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "external_id": "ORD-100245",
    "send_date": "2026-07-15",
    "contact": {
      "first_name": "Ivan",
      "last_name": "Petrov",
      "phone": "+359888123456"
    },
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Order Исходящий складской заказ. Опциональные связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ORD-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.type_id нет integer:int64 | null 1
data.shop_id нет integer:int64 | null min: 1 12
data.warehouse_id нет integer:int64 | null min: 1 42
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.status нет object | null
data.status.id да integer:int64 20
data.status.name да string "Created"
data.status.color нет string | null "#2457c5"
data.status.background_color нет string | null "#eaf0ff"
data.order_date нет string:date | null "2026-07-14"
data.send_date нет string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id нет integer:int64 | null min: 1 1
data.customer_type нет integer:int64 | null 1
data.is_cod нет boolean true
data.amounts нет OrderAmounts
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.company_id нет integer:int64 | null min: 1 7
data.marking да OrderMarking Marking data expected for products in the order.
data.marking.required да boolean Whether the order contains products that require marking data after picking. true
data.marking.types да array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] нет string "chestny_znak"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"
data.offers нет array<OrderLineEmbedded>
data.offers[] нет OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id да integer:int64 readOnly min: 1 7001
data.offers[].product_id нет integer:int64 | null min: 1 1201
data.offers[].quantity нет number:float | null min: 0 2
data.offers[].estimated_price нет number:float | null 19.5
data.offers[].price нет number:float | null 19.99
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].batch нет string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id нет integer:int64 | null min: 1 9
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].reservation нет OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty да number:float 3
data.offers[].reservation.reserved_qty да number:float 1
data.offers[].reservation.unreserved_qty да number:float 2
data.offers[].reservation.missing_qty да number:float 2
data.offers[].reservation.status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items нет array<OrderReservationItem>
data.offers[].reservation_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id да integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name нет string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article нет string | null "ART-001245"
data.offers[].reservation_items[].offer_sku нет string | null "SKU-001245"
data.offers[].reservation_items[].required_qty да number:float 3
data.offers[].reservation_items[].reserved_qty да number:float 1
data.offers[].reservation_items[].unreserved_qty да number:float 2
data.offers[].reservation_items[].missing_qty да number:float 2
data.offers[].reservation_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids да array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.offers[].reservation_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite да boolean false
data.offers[].reservation_items[].expanded_from_quant да boolean false
data.offers[].reservation_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity нет number:float | null 6
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].requested_lot нет WarehouseLot
data.offers[].requested_lot.batch да string | null "LOT-2026"
data.offers[].requested_lot.production_date да string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date да string:date | null "2027-01-15"
data.offers[].picked_quantity нет number:float min: 0 2
data.offers[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] нет OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch да string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity да number:float min: 0 2
data.reservation нет OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready да boolean false
data.reservation.reason да string | null "Not all order products are reserved."
data.reservation.expected_total да number:float 3
data.reservation.reserved_total да number:float 1
data.reservation.unreserved_total да number:float 2
data.reservation.missing_total да number:float 2
data.reservation.missing_items да array<OrderReservationItem>
data.reservation.missing_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id да integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name нет string | null "Coffee 250g"
data.reservation.missing_items[].offer_article нет string | null "ART-001245"
data.reservation.missing_items[].offer_sku нет string | null "SKU-001245"
data.reservation.missing_items[].required_qty да number:float 3
data.reservation.missing_items[].reserved_qty да number:float 1
data.reservation.missing_items[].unreserved_qty да number:float 2
data.reservation.missing_items[].missing_qty да number:float 2
data.reservation.missing_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids да array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.reservation.missing_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite да boolean false
data.reservation.missing_items[].expanded_from_quant да boolean false
data.reservation.missing_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity нет number:float | null 6
data.reservation.error да boolean false
data.consumables нет array<OrderConsumable>
data.consumables[] нет OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id да integer:int64 min: 1 301
data.consumables[].order_id да integer:int64 min: 1 8101
data.consumables[].product_id да integer:int64 min: 1 1202
data.consumables[].warehouse_id да integer:int64 | null min: 1 734
data.consumables[].place_id да integer:int64 | null min: 1 501
data.consumables[].quantity да number:float 1
data.consumables[].stock_location_mode да enum enum: placed, unplaced "unplaced"
data.consumables[].created_at да string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at да string:date-time | null "2026-07-14T10:30:00Z"
data.status_history нет array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] нет OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id да integer:int64 130
data.status_history[].previous_status_id да integer:int64 | null 110
data.status_history[].changed_at да string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source да enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred да boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta нет OrderStatusHistoryMeta
data.status_history_meta.available да boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history да boolean The last available event has the current order status. False also when history is empty. true
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/orders/{id}

Получить заказ

operationIdgetOrders
РазделЗаказы
БезопасностьbearerAuth

Возвращает один ресурс: заказ, если он существует и видим аутентифицированному аккаунту.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Request include=status_history to receive chronological WMS status transitions with changed_at (ISO 8601 and explicit timezone offset), source and inferred. status_history_meta reports availability and whether the last event matches the current status; surviving logs do not guarantee a complete history. send_date is the stored order date field and may come from import, manual input or integration processing; it is not a universal physical carrier-handover timestamp. Status transitions and shipment-document closure must be interpreted as separate recorded events. Dedicated picked_at, packed_at and shipped_at milestones are not exposed.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
include query нет string form false Add status_history for recorded WMS status transitions; the other detail relations remain included by default. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. "status_history"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Order Исходящий складской заказ. Опциональные связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ORD-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.type_id нет integer:int64 | null 1
data.shop_id нет integer:int64 | null min: 1 12
data.warehouse_id нет integer:int64 | null min: 1 42
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.status нет object | null
data.status.id да integer:int64 20
data.status.name да string "Created"
data.status.color нет string | null "#2457c5"
data.status.background_color нет string | null "#eaf0ff"
data.order_date нет string:date | null "2026-07-14"
data.send_date нет string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id нет integer:int64 | null min: 1 1
data.customer_type нет integer:int64 | null 1
data.is_cod нет boolean true
data.amounts нет OrderAmounts
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.company_id нет integer:int64 | null min: 1 7
data.marking да OrderMarking Marking data expected for products in the order.
data.marking.required да boolean Whether the order contains products that require marking data after picking. true
data.marking.types да array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] нет string "chestny_znak"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"
data.offers нет array<OrderLineEmbedded>
data.offers[] нет OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id да integer:int64 readOnly min: 1 7001
data.offers[].product_id нет integer:int64 | null min: 1 1201
data.offers[].quantity нет number:float | null min: 0 2
data.offers[].estimated_price нет number:float | null 19.5
data.offers[].price нет number:float | null 19.99
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].batch нет string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id нет integer:int64 | null min: 1 9
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].reservation нет OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty да number:float 3
data.offers[].reservation.reserved_qty да number:float 1
data.offers[].reservation.unreserved_qty да number:float 2
data.offers[].reservation.missing_qty да number:float 2
data.offers[].reservation.status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items нет array<OrderReservationItem>
data.offers[].reservation_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id да integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name нет string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article нет string | null "ART-001245"
data.offers[].reservation_items[].offer_sku нет string | null "SKU-001245"
data.offers[].reservation_items[].required_qty да number:float 3
data.offers[].reservation_items[].reserved_qty да number:float 1
data.offers[].reservation_items[].unreserved_qty да number:float 2
data.offers[].reservation_items[].missing_qty да number:float 2
data.offers[].reservation_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids да array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.offers[].reservation_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite да boolean false
data.offers[].reservation_items[].expanded_from_quant да boolean false
data.offers[].reservation_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity нет number:float | null 6
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].requested_lot нет WarehouseLot
data.offers[].requested_lot.batch да string | null "LOT-2026"
data.offers[].requested_lot.production_date да string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date да string:date | null "2027-01-15"
data.offers[].picked_quantity нет number:float min: 0 2
data.offers[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] нет OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch да string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity да number:float min: 0 2
data.reservation нет OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready да boolean false
data.reservation.reason да string | null "Not all order products are reserved."
data.reservation.expected_total да number:float 3
data.reservation.reserved_total да number:float 1
data.reservation.unreserved_total да number:float 2
data.reservation.missing_total да number:float 2
data.reservation.missing_items да array<OrderReservationItem>
data.reservation.missing_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id да integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name нет string | null "Coffee 250g"
data.reservation.missing_items[].offer_article нет string | null "ART-001245"
data.reservation.missing_items[].offer_sku нет string | null "SKU-001245"
data.reservation.missing_items[].required_qty да number:float 3
data.reservation.missing_items[].reserved_qty да number:float 1
data.reservation.missing_items[].unreserved_qty да number:float 2
data.reservation.missing_items[].missing_qty да number:float 2
data.reservation.missing_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids да array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.reservation.missing_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite да boolean false
data.reservation.missing_items[].expanded_from_quant да boolean false
data.reservation.missing_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity нет number:float | null 6
data.reservation.error да boolean false
data.consumables нет array<OrderConsumable>
data.consumables[] нет OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id да integer:int64 min: 1 301
data.consumables[].order_id да integer:int64 min: 1 8101
data.consumables[].product_id да integer:int64 min: 1 1202
data.consumables[].warehouse_id да integer:int64 | null min: 1 734
data.consumables[].place_id да integer:int64 | null min: 1 501
data.consumables[].quantity да number:float 1
data.consumables[].stock_location_mode да enum enum: placed, unplaced "unplaced"
data.consumables[].created_at да string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at да string:date-time | null "2026-07-14T10:30:00Z"
data.status_history нет array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] нет OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id да integer:int64 130
data.status_history[].previous_status_id да integer:int64 | null 110
data.status_history[].changed_at да string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source да enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred да boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta нет OrderStatusHistoryMeta
data.status_history_meta.available да boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history да boolean The last available event has the current order status. False also when history is empty. true
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z",
    "status_history": [
      {
        "status_id": 20,
        "previous_status_id": 10,
        "changed_at": "2026-07-14T12:00:00+03:00",
        "source": "action_log",
        "inferred": false
      }
    ],
    "status_history_meta": {
      "available": true,
      "current_status_matches_history": true
    }
  },
  "meta": {
    "api_version": "v2"
  }
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}

Обновить заказ

operationIdreplaceOrders
РазделЗаказы
БезопасностьbearerAuth

Replaces editable order fields before the lifecycle reaches a locked status. Contact, delivery, comments, dimensions, and selected header fields may be changed; system totals remain server-calculated.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceOrderRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да ReplaceOrderPayload Legacy PUT payload. Текущий backend применяет семантику частичного обновления и оставляет пропущенные поля без изменений.
data.external_id нет string | null "ORD-100245"
data.send_date нет string:date | null "2026-07-16"
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.is_cod нет boolean true
data.amounts нет object | null
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.weight нет object | null
data.weight.value нет number:float | null min: 0 250
data.weight.unit да enum enum: g "g"
data.dimensions нет object | null
data.dimensions.x нет number:float | null min: 0 105
data.dimensions.y нет number:float | null min: 0 200
data.dimensions.z нет number:float | null min: 0 32
data.dimensions.unit да enum enum: mm "mm"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"

Примеры запроса

default

{
  "data": {
    "send_date": "2026-07-16",
    "comments": {
      "inner_text": "Priority shipment"
    }
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Order Исходящий складской заказ. Опциональные связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ORD-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.type_id нет integer:int64 | null 1
data.shop_id нет integer:int64 | null min: 1 12
data.warehouse_id нет integer:int64 | null min: 1 42
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.status нет object | null
data.status.id да integer:int64 20
data.status.name да string "Created"
data.status.color нет string | null "#2457c5"
data.status.background_color нет string | null "#eaf0ff"
data.order_date нет string:date | null "2026-07-14"
data.send_date нет string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id нет integer:int64 | null min: 1 1
data.customer_type нет integer:int64 | null 1
data.is_cod нет boolean true
data.amounts нет OrderAmounts
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.company_id нет integer:int64 | null min: 1 7
data.marking да OrderMarking Marking data expected for products in the order.
data.marking.required да boolean Whether the order contains products that require marking data after picking. true
data.marking.types да array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] нет string "chestny_znak"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"
data.offers нет array<OrderLineEmbedded>
data.offers[] нет OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id да integer:int64 readOnly min: 1 7001
data.offers[].product_id нет integer:int64 | null min: 1 1201
data.offers[].quantity нет number:float | null min: 0 2
data.offers[].estimated_price нет number:float | null 19.5
data.offers[].price нет number:float | null 19.99
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].batch нет string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id нет integer:int64 | null min: 1 9
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].reservation нет OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty да number:float 3
data.offers[].reservation.reserved_qty да number:float 1
data.offers[].reservation.unreserved_qty да number:float 2
data.offers[].reservation.missing_qty да number:float 2
data.offers[].reservation.status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items нет array<OrderReservationItem>
data.offers[].reservation_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id да integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name нет string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article нет string | null "ART-001245"
data.offers[].reservation_items[].offer_sku нет string | null "SKU-001245"
data.offers[].reservation_items[].required_qty да number:float 3
data.offers[].reservation_items[].reserved_qty да number:float 1
data.offers[].reservation_items[].unreserved_qty да number:float 2
data.offers[].reservation_items[].missing_qty да number:float 2
data.offers[].reservation_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids да array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.offers[].reservation_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite да boolean false
data.offers[].reservation_items[].expanded_from_quant да boolean false
data.offers[].reservation_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity нет number:float | null 6
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].requested_lot нет WarehouseLot
data.offers[].requested_lot.batch да string | null "LOT-2026"
data.offers[].requested_lot.production_date да string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date да string:date | null "2027-01-15"
data.offers[].picked_quantity нет number:float min: 0 2
data.offers[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] нет OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch да string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity да number:float min: 0 2
data.reservation нет OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready да boolean false
data.reservation.reason да string | null "Not all order products are reserved."
data.reservation.expected_total да number:float 3
data.reservation.reserved_total да number:float 1
data.reservation.unreserved_total да number:float 2
data.reservation.missing_total да number:float 2
data.reservation.missing_items да array<OrderReservationItem>
data.reservation.missing_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id да integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name нет string | null "Coffee 250g"
data.reservation.missing_items[].offer_article нет string | null "ART-001245"
data.reservation.missing_items[].offer_sku нет string | null "SKU-001245"
data.reservation.missing_items[].required_qty да number:float 3
data.reservation.missing_items[].reserved_qty да number:float 1
data.reservation.missing_items[].unreserved_qty да number:float 2
data.reservation.missing_items[].missing_qty да number:float 2
data.reservation.missing_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids да array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.reservation.missing_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite да boolean false
data.reservation.missing_items[].expanded_from_quant да boolean false
data.reservation.missing_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity нет number:float | null 6
data.reservation.error да boolean false
data.consumables нет array<OrderConsumable>
data.consumables[] нет OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id да integer:int64 min: 1 301
data.consumables[].order_id да integer:int64 min: 1 8101
data.consumables[].product_id да integer:int64 min: 1 1202
data.consumables[].warehouse_id да integer:int64 | null min: 1 734
data.consumables[].place_id да integer:int64 | null min: 1 501
data.consumables[].quantity да number:float 1
data.consumables[].stock_location_mode да enum enum: placed, unplaced "unplaced"
data.consumables[].created_at да string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at да string:date-time | null "2026-07-14T10:30:00Z"
data.status_history нет array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] нет OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id да integer:int64 130
data.status_history[].previous_status_id да integer:int64 | null 110
data.status_history[].changed_at да string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source да enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred да boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta нет OrderStatusHistoryMeta
data.status_history_meta.available да boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history да boolean The last available event has the current order status. False also when history is empty. true
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/orders/{id}

Обновить заказ

operationIdpatchOrders
РазделЗаказы
БезопасностьbearerAuth

Partially updates editable order fields. Omitted fields are left unchanged and the same lifecycle, data-scope, and idempotency rules as PUT /api/v2/orders/{id} apply.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

PatchOrderRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да PatchOrderPayload Payload частичного обновления заказа. Пропущенные поля не изменяются.
data.external_id нет string | null "ORD-100245"
data.send_date нет string:date | null "2026-07-16"
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.is_cod нет boolean true
data.amounts нет object | null
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.weight нет object | null
data.weight.value нет number:float | null min: 0 250
data.weight.unit да enum enum: g "g"
data.dimensions нет object | null
data.dimensions.x нет number:float | null min: 0 105
data.dimensions.y нет number:float | null min: 0 200
data.dimensions.z нет number:float | null min: 0 32
data.dimensions.unit да enum enum: mm "mm"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"

Примеры запроса

default

{
  "data": {
    "send_date": "2026-07-16"
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да Order Исходящий складской заказ. Опциональные связанные поля присутствуют, когда контроллер их загрузил или они запрошены через include.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.external_id нет string | null "ORD-100245"
data.domain_id нет integer:int64 | null min: 1 3
data.type_id нет integer:int64 | null 1
data.shop_id нет integer:int64 | null min: 1 12
data.warehouse_id нет integer:int64 | null min: 1 42
data.status_id нет integer:int64 | null ID статуса заказа. Текущий backend хранит статусы в базе данных; значения не моделируются как закрытый enum в публичном контракте. 20
data.status нет object | null
data.status.id да integer:int64 20
data.status.name да string "Created"
data.status.color нет string | null "#2457c5"
data.status.background_color нет string | null "#eaf0ff"
data.order_date нет string:date | null "2026-07-14"
data.send_date нет string | null Stored order send date, potentially supplied by import, manual input or integration processing. It may be a date or date-time string; it is not a universal physical carrier-handover timestamp. "2026-07-15 20:25:08"
data.source_id нет integer:int64 | null min: 1 1
data.customer_type нет integer:int64 | null 1
data.is_cod нет boolean true
data.amounts нет OrderAmounts
data.amounts.shipping_price нет number:float | null 8.6
data.amounts.shipping_cost нет number:float | null 0
data.amounts.sum нет number:float | null 39.98
data.amounts.cod_sum нет number:float | null 48.58
data.company_id нет integer:int64 | null min: 1 7
data.marking да OrderMarking Marking data expected for products in the order.
data.marking.required да boolean Whether the order contains products that require marking data after picking. true
data.marking.types да array<string> Marking types required by products in the order. Currently chestny_znak; the list may gain values such as jewel_uin and imei.
data.marking.types[] нет string "chestny_znak"
data.contact нет object | null
data.contact.first_name нет string | null "Ivan"
data.contact.middle_name нет string | null "Ivanovich"
data.contact.last_name нет string | null "Petrov"
data.contact.phone нет string | null "+359888123456"
data.contact.email нет string:email | null "customer@example.com"
data.contact.country_id нет integer:int64 | null min: 1 100
data.contact.city_id нет integer:int64 | null min: 1 200
data.contact.postcode нет string | null "1000"
data.contact.latitude нет number:float | null min: -90
max: 90
42.6977
data.contact.longitude нет number:float | null min: -180
max: 180
23.3219
data.contact.full_address нет string | null "1 Vitosha Boulevard, Sofia"
data.delivery нет object | null
data.delivery.service_id нет integer:int64 | null min: 1 1
data.delivery.delivery_type да enum | null enum: door, pickup_point Normalized delivery channel derived from the configured delivery service. Null when the service type is unknown. "door"
data.delivery.is_courier да boolean True for door delivery; false for pickup-point delivery or an unknown service type. true
data.delivery.status нет string | null "created"
data.delivery.track_number нет string | null "CDEK-123456789"
data.delivery.pickup_point_id нет string | null "SOFIA-01"
data.delivery.source_id нет string | null "cdek-15"
data.delivery.tariff_code нет integer:int64 | null 136
data.delivery.additional_services нет object Values of additional CDEK services configured for the selected integration. Boolean true enables a code-only service; other values are sent as the CDEK parameter. {"TRYING_ON":true,"PART_DELIV":false,"PACKAGE_1":2}
data.delivery.label нет string:uri | null "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf"
data.delivery.delivery_date нет string:date | null "2026-07-16"
data.delivery.delivery_time_start нет string:time | null "09:00:00Z"
data.delivery.delivery_time_end нет string:time | null "18:00:00Z"
data.comments нет object | null
data.comments.delivery_service_text нет string | null "Call before delivery"
data.comments.inner_text нет string | null "VIP customer"
data.offers нет array<OrderLineEmbedded>
data.offers[] нет OrderLineEmbedded Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.offers[].id да integer:int64 readOnly min: 1 7001
data.offers[].product_id нет integer:int64 | null min: 1 1201
data.offers[].quantity нет number:float | null min: 0 2
data.offers[].estimated_price нет number:float | null 19.5
data.offers[].price нет number:float | null 19.99
data.offers[].expiration_date нет string:date | null "2027-01-15"
data.offers[].batch нет string | null maxLength: 15 "LOT-2026"
data.offers[].operation_user_id нет integer:int64 | null min: 1 9
data.offers[].product нет object | null
data.offers[].product.id да integer:int64 readOnly min: 1 1201
data.offers[].product.name да string "Coffee 250g"
data.offers[].product.external_id нет string | null "EXT-10045"
data.offers[].reservation нет OrderReservationLine Reservation totals for one order line.
data.offers[].reservation.required_qty да number:float 3
data.offers[].reservation.reserved_qty да number:float 1
data.offers[].reservation.unreserved_qty да number:float 2
data.offers[].reservation.missing_qty да number:float 2
data.offers[].reservation.status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items нет array<OrderReservationItem>
data.offers[].reservation_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.offers[].reservation_items[].offer_id да integer:int64 min: 1 1201
data.offers[].reservation_items[].offer_name нет string | null "Coffee 250g"
data.offers[].reservation_items[].offer_article нет string | null "ART-001245"
data.offers[].reservation_items[].offer_sku нет string | null "SKU-001245"
data.offers[].reservation_items[].required_qty да number:float 3
data.offers[].reservation_items[].reserved_qty да number:float 1
data.offers[].reservation_items[].unreserved_qty да number:float 2
data.offers[].reservation_items[].missing_qty да number:float 2
data.offers[].reservation_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.offers[].reservation_items[].source_order_offer_ids да array<integer:int64>
data.offers[].reservation_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.offers[].reservation_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.offers[].reservation_items[].expanded_from_composite да boolean false
data.offers[].reservation_items[].expanded_from_quant да boolean false
data.offers[].reservation_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.offers[].reservation_items[].quant_base_multiplicity нет number:float | null 6
data.offers[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.offers[].production_date нет string:date | null "2026-01-15"
data.offers[].requested_lot нет WarehouseLot
data.offers[].requested_lot.batch да string | null "LOT-2026"
data.offers[].requested_lot.production_date да string:date | null "2026-01-15"
data.offers[].requested_lot.expiration_date да string:date | null "2027-01-15"
data.offers[].picked_quantity нет number:float min: 0 2
data.offers[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.offers[].fulfillment_lots[] нет OrderFulfillmentLot
data.offers[].fulfillment_lots[].batch да string | null "LOT-2026"
data.offers[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.offers[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.offers[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.offers[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.offers[].fulfillment_lots[].quantity да number:float min: 0 2
data.reservation нет OrderReservation Reservation readiness and shortages calculated for the order.
data.reservation.ready да boolean false
data.reservation.reason да string | null "Not all order products are reserved."
data.reservation.expected_total да number:float 3
data.reservation.reserved_total да number:float 1
data.reservation.unreserved_total да number:float 2
data.reservation.missing_total да number:float 2
data.reservation.missing_items да array<OrderReservationItem>
data.reservation.missing_items[] нет OrderReservationItem Physical product or expanded component used to explain a reservation shortage.
data.reservation.missing_items[].offer_id да integer:int64 min: 1 1201
data.reservation.missing_items[].offer_name нет string | null "Coffee 250g"
data.reservation.missing_items[].offer_article нет string | null "ART-001245"
data.reservation.missing_items[].offer_sku нет string | null "SKU-001245"
data.reservation.missing_items[].required_qty да number:float 3
data.reservation.missing_items[].reserved_qty да number:float 1
data.reservation.missing_items[].unreserved_qty да number:float 2
data.reservation.missing_items[].missing_qty да number:float 2
data.reservation.missing_items[].status да enum enum: not_required, missing, partial, reserved Reservation state calculated from the quantity required by the order and the quantity actually reserved. "partial"
data.reservation.missing_items[].source_order_offer_ids да array<integer:int64>
data.reservation.missing_items[].source_order_offer_ids[] нет integer:int64 min: 1 7001
data.reservation.missing_items[].source да enum enum: order_offer, component, quant, composite_quant "order_offer"
data.reservation.missing_items[].expanded_from_composite да boolean false
data.reservation.missing_items[].expanded_from_quant да boolean false
data.reservation.missing_items[].quant_base_offer_id нет integer:int64 | null min: 1 1201
data.reservation.missing_items[].quant_base_multiplicity нет number:float | null 6
data.reservation.error да boolean false
data.consumables нет array<OrderConsumable>
data.consumables[] нет OrderConsumable Current consumable line, not an append-only consumption event. Unplaced usage creates a commitment but does not decrease physical stockTotal; do not treat that stockTotal as remaining packaging inventory.
data.consumables[].id да integer:int64 min: 1 301
data.consumables[].order_id да integer:int64 min: 1 8101
data.consumables[].product_id да integer:int64 min: 1 1202
data.consumables[].warehouse_id да integer:int64 | null min: 1 734
data.consumables[].place_id да integer:int64 | null min: 1 501
data.consumables[].quantity да number:float 1
data.consumables[].stock_location_mode да enum enum: placed, unplaced "unplaced"
data.consumables[].created_at да string:date-time | null "2026-07-14T10:30:00Z"
data.consumables[].updated_at да string:date-time | null "2026-07-14T10:30:00Z"
data.status_history нет array<OrderStatusHistoryEvent> Present only on GET list/detail with include=status_history. Ordered chronologically, retains repeat status cycles and combines surviving audit and action-log entries. Missing history returns an empty array.
data.status_history[] нет OrderStatusHistoryEvent Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover.
data.status_history[].status_id да integer:int64 130
data.status_history[].previous_status_id да integer:int64 | null 110
data.status_history[].changed_at да string:date-time Time of the WMS status transition in ISO 8601 with an explicit timezone offset. "2026-07-14T12:00:00+03:00"
data.status_history[].source да enum enum: audit, action_log, inferred "action_log"
data.status_history[].inferred да boolean True only for a reconstructed initial status at order creation; this is not a separately recorded transition. false
data.status_history_meta нет OrderStatusHistoryMeta
data.status_history_meta.available да boolean At least one event is available. This does not guarantee complete historical coverage. true
data.status_history_meta.current_status_matches_history да boolean The last available event has the current order status. False also when history is empty. true
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 8101,
    "external_id": "ORD-100245",
    "domain_id": 3,
    "type_id": 1,
    "shop_id": 12,
    "warehouse_id": 42,
    "status_id": 20,
    "status": {
      "id": 20,
      "name": "Created",
      "color": "#2457c5",
      "background_color": "#eaf0ff"
    },
    "order_date": "2026-07-14",
    "send_date": "2026-07-15",
    "source_id": 1,
    "customer_type": 1,
    "is_cod": true,
    "amounts": {
      "shipping_price": 8.6,
      "shipping_cost": 0,
      "sum": 39.98,
      "cod_sum": 48.58
    },
    "company_id": 7,
    "marking": {
      "required": true,
      "types": [
        "chestny_znak"
      ]
    },
    "contact": {
      "first_name": "Ivan",
      "middle_name": null,
      "last_name": "Petrov",
      "phone": "+359888123456",
      "email": "customer@example.com",
      "country_id": 100,
      "city_id": 200,
      "postcode": "1000",
      "latitude": 42.6977,
      "longitude": 23.3219,
      "full_address": "1 Vitosha Boulevard, Sofia"
    },
    "delivery": {
      "service_id": 1,
      "delivery_type": "door",
      "is_courier": true,
      "status": "created",
      "track_number": "CDEK-123456789",
      "source_id": "cdek-15",
      "tariff_code": 136,
      "label": "https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf",
      "delivery_date": "2026-07-16",
      "delivery_time_start": "09:00:00Z",
      "delivery_time_end": "18:00:00Z"
    },
    "comments": {
      "delivery_service_text": "Call before delivery",
      "inner_text": "VIP customer"
    },
    "offers": [
      {
        "id": 7001,
        "product_id": 1201,
        "quantity": 2,
        "estimated_price": 19.5,
        "price": 19.99,
        "expiration_date": "2027-01-15",
        "batch": "LOT-2026",
        "operation_user_id": 9,
        "product": {
          "id": 1201,
          "name": "Coffee 250g",
          "external_id": "EXT-10045"
        },
        "created_at": "2026-07-14T09:00:00Z",
        "updated_at": "2026-07-14T09:30:00Z"
      }
    ],
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}

Удалить заказ

operationIddeleteOrders
РазделЗаказы
БезопасностьbearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
GET /api/v2/orders/{id}/integration-events

Export Ozon and Wildberries interaction history for one order

operationIdgetOrderIntegrationEvents
РазделЗаказы
БезопасностьbearerAuth

Streams one JSON document with all retained order-related records, without the UI history limit.
Includes new HTTP attempts, legacy diagnostics and WB inbox versions, latest operation states and the current order payload.
This is not a paginated response. Dates are UTC. Read the complete document and verify export_complete.
coverage.complete is false because historical data may be missing, truncated, masked or expired.
Credentials, contact and marking data are masked. Binary responses contain metadata and SHA256 only. JSON and text responses are not truncated.
Shared bodies are omitted unless all referenced orders are visible. Unknown membership is fail-closed.
Application-internal and external marketplace activity without a captured HTTP call is not guaranteed.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001/integration-events" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
download query нет boolean Return the same JSON as a downloadable attachment.

Тело запроса

Тело запроса отсутствует.

Ответы

200 Streamed history. Check export_complete even when HTTP status is 200.

Streamed history. Check export_complete even when HTTP status is 200.

Поле Обязательное Тип Флаги Ограничения Описание Пример
meta да object Schema version, UTC timezone, order/integration identifiers and coverage limitations.
events да array<object>
events[] нет object Source-qualified id, source, provider, account_id, at, HTTP details or snapshot, masked request/response and omission reason.
event_count да integer min: 0
export_complete да boolean All retained readable sources were exported; not a guarantee of historical coverage.
export_error да string | null journal_read_failed if streaming was interrupted by a storage/read error.

401 Требуется аутентификация

Authentication required.

Тело ответа отсутствует.

403 Доступ запрещен

Order/log access denied.

Тело ответа отсутствует.

404 Не найдено

Order not visible or no Ozon/Wildberries link exists.

Тело ответа отсутствует.

POST /api/v2/orders/{id}/lines

Создать заказ

operationIdcreateOrdersLines
РазделЗаказы
БезопасностьbearerAuth

Adds one or more product lines to an editable order. Products are resolved by product_id or product_external_id within the caller visible scope.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders/1001/lines" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

AddOrderLinesRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object
data.lines да array<OrderLineCreatePayload> minItems: 1
data.lines[] нет OrderLineCreatePayload Payload строки для /orders/{id}/lines. Backend-валидация требует product_id для этого endpoint.
data.lines[].product_id да integer:int64 min: 1 1201
data.lines[].quantity да number:float min: 0.01 2
data.lines[].estimated_price нет number:float | null 19.5
data.lines[].price нет number:float | null 19.99
data.lines[].expiration_date нет string:date | null "2027-01-15"
data.lines[].batch нет string | null maxLength: 15 "LOT-2026"
data.lines[].operation_user_id нет integer:int64 | null min: 1 9

Примеры запроса

default

{
  "data": {
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<OrderLine>
data[] нет OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].id да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].order_id нет integer:int64 | null min: 1 8101
data[].product_id нет integer:int64 | null min: 1 1201
data[].quantity нет number:float | null min: 0 2
data[].estimated_price нет number:float | null 19.5
data[].price нет number:float | null 19.99
data[].expiration_date нет string:date | null "2027-01-15"
data[].batch нет string | null maxLength: 15 "LOT-2026"
data[].operation_user_id нет integer:int64 | null min: 1 9
data[].product нет object | null
data[].product.id да integer:int64 readOnly min: 1 1201
data[].product.name да string "Coffee 250g"
data[].product.external_id нет string | null "EXT-10045"
data[].production_date нет string:date | null "2026-01-15"
data[].requested_lot нет WarehouseLot
data[].requested_lot.batch да string | null "LOT-2026"
data[].requested_lot.production_date да string:date | null "2026-01-15"
data[].requested_lot.expiration_date да string:date | null "2027-01-15"
data[].picked_quantity нет number:float min: 0 2
data[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].fulfillment_lots[] нет OrderFulfillmentLot
data[].fulfillment_lots[].batch да string | null "LOT-2026"
data[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data[].fulfillment_lots[].quantity да number:float min: 0 2
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": [
    {
      "id": 7001,
      "order_id": 8101,
      "product_id": 1201,
      "quantity": 2,
      "estimated_price": 19.5,
      "price": 19.99,
      "expiration_date": "2027-01-15",
      "batch": "LOT-2026",
      "operation_user_id": 9,
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}/lines/{lineId}

Обновить заказ

operationIdreplaceOrdersLines
РазделЗаказы
БезопасностьbearerAuth

Update order. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceOrderLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLineReplacePayload Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление.
data.quantity нет number:float | null min: 0.01 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9

Примеры запроса

default

{
  "data": {
    "quantity": 3,
    "batch": "LOT-2026"
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.order_id нет integer:int64 | null min: 1 8101
data.product_id нет integer:int64 | null min: 1 1201
data.quantity нет number:float | null min: 0 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.production_date нет string:date | null "2026-01-15"
data.requested_lot нет WarehouseLot
data.requested_lot.batch да string | null "LOT-2026"
data.requested_lot.production_date да string:date | null "2026-01-15"
data.requested_lot.expiration_date да string:date | null "2027-01-15"
data.picked_quantity нет number:float min: 0 2
data.fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] нет OrderFulfillmentLot
data.fulfillment_lots[].batch да string | null "LOT-2026"
data.fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.fulfillment_lots[].quantity да number:float min: 0 2
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PATCH /api/v2/orders/{id}/lines/{lineId}

Обновить заказ

operationIdpatchOrdersLines
РазделЗаказы
БезопасностьbearerAuth

Update order. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

PatchOrderLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLinePatchPayload Редактируемые поля строки заказа. ID строки берется из path и не должен повторяться в body.
data.quantity нет number:float | null min: 0.01 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9

Примеры запроса

default

{
  "data": {
    "quantity": 3
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.order_id нет integer:int64 | null min: 1 8101
data.product_id нет integer:int64 | null min: 1 1201
data.quantity нет number:float | null min: 0 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.production_date нет string:date | null "2026-01-15"
data.requested_lot нет WarehouseLot
data.requested_lot.batch да string | null "LOT-2026"
data.requested_lot.production_date да string:date | null "2026-01-15"
data.requested_lot.expiration_date да string:date | null "2027-01-15"
data.picked_quantity нет number:float min: 0 2
data.fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] нет OrderFulfillmentLot
data.fulfillment_lots[].batch да string | null "LOT-2026"
data.fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.fulfillment_lots[].quantity да number:float min: 0 2
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}/lines/{lineId}

Удалить заказ

operationIddeleteOrdersLines
РазделЗаказы
БезопасностьbearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001/lines/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
POST /api/v2/orders/{id}/offers deprecated

Создать заказ

operationIdcreateOrdersOffers
РазделЗаказы
БезопасностьbearerAuth

Compatibility alias for adding order lines. Prefer /lines in new integrations; behavior and validation are identical.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/orders/1001/offers" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

AddOrderLinesRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object
data.lines да array<OrderLineCreatePayload> minItems: 1
data.lines[] нет OrderLineCreatePayload Payload строки для /orders/{id}/lines. Backend-валидация требует product_id для этого endpoint.
data.lines[].product_id да integer:int64 min: 1 1201
data.lines[].quantity да number:float min: 0.01 2
data.lines[].estimated_price нет number:float | null 19.5
data.lines[].price нет number:float | null 19.99
data.lines[].expiration_date нет string:date | null "2027-01-15"
data.lines[].batch нет string | null maxLength: 15 "LOT-2026"
data.lines[].operation_user_id нет integer:int64 | null min: 1 9

Примеры запроса

default

{
  "data": {
    "lines": [
      {
        "product_id": 1201,
        "quantity": 2,
        "price": 19.99
      }
    ]
  }
}

Ответы

201 Created.

Created.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да array<OrderLine>
data[] нет OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data[].id да integer:int64 readOnly min: 1 1001
data[].created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data[].order_id нет integer:int64 | null min: 1 8101
data[].product_id нет integer:int64 | null min: 1 1201
data[].quantity нет number:float | null min: 0 2
data[].estimated_price нет number:float | null 19.5
data[].price нет number:float | null 19.99
data[].expiration_date нет string:date | null "2027-01-15"
data[].batch нет string | null maxLength: 15 "LOT-2026"
data[].operation_user_id нет integer:int64 | null min: 1 9
data[].product нет object | null
data[].product.id да integer:int64 readOnly min: 1 1201
data[].product.name да string "Coffee 250g"
data[].product.external_id нет string | null "EXT-10045"
data[].production_date нет string:date | null "2026-01-15"
data[].requested_lot нет WarehouseLot
data[].requested_lot.batch да string | null "LOT-2026"
data[].requested_lot.production_date да string:date | null "2026-01-15"
data[].requested_lot.expiration_date да string:date | null "2027-01-15"
data[].picked_quantity нет number:float min: 0 2
data[].fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data[].fulfillment_lots[] нет OrderFulfillmentLot
data[].fulfillment_lots[].batch да string | null "LOT-2026"
data[].fulfillment_lots[].production_date да string:date | null "2026-01-15"
data[].fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data[].fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data[].fulfillment_lots[].product_id да integer:int64 min: 1 1201
data[].fulfillment_lots[].quantity да number:float min: 0 2
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": [
    {
      "id": 7001,
      "order_id": 8101,
      "product_id": 1201,
      "quantity": 2,
      "estimated_price": 19.5,
      "price": 19.99,
      "expiration_date": "2027-01-15",
      "batch": "LOT-2026",
      "operation_user_id": 9,
      "product": {
        "id": 1201,
        "name": "Coffee 250g",
        "external_id": "EXT-10045"
      },
      "created_at": "2026-07-14T09:00:00Z",
      "updated_at": "2026-07-14T09:30:00Z"
    }
  ],
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
PUT /api/v2/orders/{id}/offers/{lineId} deprecated

Обновить заказ

operationIdreplaceOrdersOffers
РазделЗаказы
БезопасностьbearerAuth

Update order. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.
Order offers include actual fulfillment_lots and production_date. Request include=consumables on the order list for current consumable lines; order details include them by default. These snapshots are not historical event feeds.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/orders/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

ReplaceOrderLineRequest обязательно

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLineReplacePayload Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление.
data.quantity нет number:float | null min: 0.01 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9

Примеры запроса

default

{
  "data": {
    "quantity": 3,
    "batch": "LOT-2026"
  }
}

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да OrderLine Scalar lot fields use the actual lot only when the full line is picked from one lot; partial/multiple actual lots leave scalars null. Before picking they retain the requested lot. Requested constraints are always available in requested_lot.
data.id да integer:int64 readOnly min: 1 1001
data.created_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.updated_at нет string:date-time | null "2026-07-14T10:30:00Z"
data.order_id нет integer:int64 | null min: 1 8101
data.product_id нет integer:int64 | null min: 1 1201
data.quantity нет number:float | null min: 0 2
data.estimated_price нет number:float | null 19.5
data.price нет number:float | null 19.99
data.expiration_date нет string:date | null "2027-01-15"
data.batch нет string | null maxLength: 15 "LOT-2026"
data.operation_user_id нет integer:int64 | null min: 1 9
data.product нет object | null
data.product.id да integer:int64 readOnly min: 1 1201
data.product.name да string "Coffee 250g"
data.product.external_id нет string | null "EXT-10045"
data.production_date нет string:date | null "2026-01-15"
data.requested_lot нет WarehouseLot
data.requested_lot.batch да string | null "LOT-2026"
data.requested_lot.production_date да string:date | null "2026-01-15"
data.requested_lot.expiration_date да string:date | null "2027-01-15"
data.picked_quantity нет number:float min: 0 2
data.fulfillment_lots нет array<OrderFulfillmentLot> Current active placed warehouse rows for this exact order line and product. Existing orders are included where these rows survive. This is a current picking snapshot, not a historical shipment event.
data.fulfillment_lots[] нет OrderFulfillmentLot
data.fulfillment_lots[].batch да string | null "LOT-2026"
data.fulfillment_lots[].production_date да string:date | null "2026-01-15"
data.fulfillment_lots[].expiration_date да string:date | null "2027-01-15"
data.fulfillment_lots[].warehouse_id да integer:int64 min: 1 734
data.fulfillment_lots[].product_id да integer:int64 min: 1 1201
data.fulfillment_lots[].quantity да number:float min: 0 2
meta да ResponseMeta
meta.api_version да enum enum: v2 "v2"
meta.deleted нет boolean true
meta.id нет integer:int64 | null min: 1 1001
meta.command_replayed нет boolean True when an idempotent cross-dock command returned the original successful result. false
meta.crossdock_configuration нет object | null
meta.crossdock_configuration.physical_warehouse_id да integer:int64 min: 1 42
meta.crossdock_configuration.enabled да boolean true
meta.crossdock_configuration.process_version да string "direct_order_v1"

Примеры ответа

success

{
  "data": {
    "id": 7001,
    "order_id": 8101,
    "product_id": 1201,
    "quantity": 2,
    "estimated_price": 19.5,
    "price": 19.99,
    "expiration_date": "2027-01-15",
    "batch": "LOT-2026",
    "operation_user_id": 9,
    "product": {
      "id": 1201,
      "name": "Coffee 250g",
      "external_id": "EXT-10045"
    },
    "created_at": "2026-07-14T09:00:00Z",
    "updated_at": "2026-07-14T09:30:00Z"
  },
  "meta": {
    "api_version": "v2"
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}
DELETE /api/v2/orders/{id}/offers/{lineId} deprecated

Удалить заказ

operationIddeleteOrdersOffers
РазделЗаказы
БезопасностьbearerAuth

Deletes the resource when the authenticated account has permission and the current lifecycle state allows deletion. If deletion is blocked by related records or document state, the API returns a validation error.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.

Пример HTTP-запроса (cURL)

Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.

curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/orders/1001/offers/1001" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer ${NWMS_TOKEN}" \
  --header "Idempotency-Key: ${NWMS_REQUEST_KEY}"

Параметры

Имя Где Обязательное Тип Style Explode Ограничения Описание Пример
id path да integer:int64 min: 1 ID заказа. 1001
lineId path да integer:int64 min: 1 ID строки документа. 1001
Idempotency-Key header нет string maxLength: 191 Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. "ord-create-20260714-001"

Тело запроса

Тело запроса отсутствует.

Ответы

200 Successful response.

Successful response.

Поле Обязательное Тип Флаги Ограничения Описание Пример
data да object | null
meta да object
meta.api_version да enum enum: v2 "v2"
meta.deleted да boolean true
meta.id да integer:int64 min: 1 1001

Примеры ответа

success

{
  "data": null,
  "meta": {
    "api_version": "v2",
    "deleted": true,
    "id": 1001
  }
}

400 Некорректный запрос

BadRequest

Некорректный запрос.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

BAD_REQUEST

{
  "message": "Bad request.",
  "error": "BAD_REQUEST"
}

401 Требуется аутентификация

Unauthorized

Требуется аутентификация.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

AUTH_REQUIRED

{
  "message": "Authentication is required.",
  "error": "AUTH_REQUIRED"
}

403 Доступ запрещен

Forbidden

Аутентифицированному аккаунту запрещено выполнять это действие.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

FORBIDDEN

{
  "message": "The authenticated account is not allowed to perform this action.",
  "error": "FORBIDDEN"
}

404 Не найдено

NotFound

Запрошенный ресурс не найден или находится вне области доступа аккаунта.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

NOT_FOUND

{
  "message": "The requested resource was not found or is outside the authenticated account scope.",
  "error": "NOT_FOUND"
}

409 Конфликт

Conflict

Запрос конфликтует с текущим состоянием ресурса или ключа идемпотентности.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

idempotencyConflict

{
  "message": "The idempotency key is already used with a different payload.",
  "error": "IDEMPOTENCY_KEY_CONFLICT"
}

422 Ошибка валидации

ValidationError

Ошибка валидации.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The given data was invalid."
error нет string "VALIDATION_ERROR"
errors да object {"warehouse_id":["The selected warehouse is invalid."]}

Примеры ответа

validationError

{
  "message": "The given data was invalid.",
  "error": "VALIDATION_ERROR",
  "errors": {
    "warehouse_id": [
      "The selected warehouse is invalid."
    ]
  }
}

429 Превышен лимит запросов

TooManyRequests

Превышен лимит запросов.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "Too Many Attempts."
error да string "RATE_LIMITED"

500 Внутренняя ошибка сервера

InternalServerError

Произошла непредвиденная ошибка сервера.

Поле Обязательное Тип Флаги Ограничения Описание Пример
message да string "The request could not be processed."
error да string "BAD_REQUEST"

Примеры ответа

INTERNAL_SERVER_ERROR

{
  "message": "An unexpected server error occurred.",
  "error": "INTERNAL_SERVER_ERROR"
}