Полный справочник API v2
Каждая операция ниже сгенерирована из OpenAPI v2 и содержит параметры, поля запроса, поля ответа, ошибки и примеры.
Приемки
Получить список приемок
| operationId | listAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Возвращает приемки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, acceptance_date, external_id, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
include |
query | нет | string |
form | false | Связанные сущности через запятую. Допустимые значения: offers. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. |
"offers" |
|
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 |
user_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по user_id с точным совпадением. Этот фильтр также можно передать как filter[user_id], если это поддерживает Laravel query adapter. |
15 |
document_barcode |
query | нет | string |
form | true | Фильтр по document_barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[document_barcode], если это поддерживает Laravel query adapter. |
"ASN-100245-BARCODE" |
|
comment |
query | нет | string |
form | true | Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. |
"Priority" |
|
acceptance_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для acceptance_date. Этот фильтр также можно передать как filter[acceptance_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
acceptance_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для acceptance_date. Этот фильтр также можно передать как filter[acceptance_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:date |
form | true | Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<Acceptance> |
|
|||
data[] |
нет | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data[].document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data[].user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data[].type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data[].comment |
нет | string | null |
"Inbound from supplier" |
|||
data[].counts |
да | AcceptanceCounts |
|
|||
data[].counts.expected |
да | number:float |
10 |
|||
data[].counts.accepted |
да | number:float |
0 |
|||
data[].counts.placed |
да | number:float |
0 |
|||
data[].acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data[].offers |
нет | array<AcceptanceLine> |
|
|||
data[].offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data[].offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data[].offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data[].offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data[].offers[].price |
нет | number:float | null |
4.99 |
|||
data[].offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data[].offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data[].offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data[].offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data[].offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data[].offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data[].crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data[].crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data[].crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data[].crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data[].crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/acceptances?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/acceptances?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/acceptances?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/acceptances",
"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"
}
Создать обычную, возвратную или cross-dock-приёмку
| operationId | createAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Создаёт один из трёх видимых типов приёмки. type_id=1 создаёт обычную приёмку, type_id=2 — возврат, а type_id=3 запускает изолированный процесс cross-dock.
For type_id=3, send a transport Idempotency-Key, a UUID data.command_id, at least one line, and the optional data.crossdock schedule fields. The client warehouse and shop are resolved in tenant scope. Before any insert, NWMS checks that cross-docking is enabled on the selected client warehouse. The acceptance, draft case, supplies, command, and initial audit event are committed atomically.
Если кросс-докинг выключен на выбранном клиентском складе, запрос возвращает validation-envelope API v2 и не оставляет частично созданную приёмку. Ответ содержит type_code=crossdock, crossdock_case, meta.crossdock_configuration и meta.command_replayed.
Тип приёмки неизменяем. Дальше используйте операции Cross-docking: создайте заказы и направления, постройте и выпустите план, выполните сканирования источника и назначения, погрузку и закрытие.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances" \
--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" |
Тело запроса
CreateAcceptanceRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateAcceptancePayload |
|
Примеры запроса
standard
{
"data": {
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"external_id": "ASN-100245",
"lines": [
{
"product_id": 1201,
"expected_quantity": 10,
"barcode": "4601234567890"
}
]
}
}
crossDock
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"warehouse_id": 43,
"shop_id": 12,
"type_id": 3,
"external_id": "ASN-XD-100245",
"acceptance_date": "2026-08-03",
"crossdock": {
"external_id": "XD-2026-001",
"planned_arrival_at": "2026-08-03T08:00:00Z",
"cutoff_at": "2026-08-03T12:00:00Z",
"planned_departure_at": "2026-08-03T14:00:00Z"
},
"lines": [
{
"product_id": 1201,
"expected_quantity": 35,
"external_line_id": "ASN-XD-LINE-1",
"barcode": "4601234567890"
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data.type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.counts |
да | AcceptanceCounts |
|
|||
data.counts.expected |
да | number:float |
10 |
|||
data.counts.accepted |
да | number:float |
0 |
|||
data.counts.placed |
да | number:float |
0 |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.offers |
нет | array<AcceptanceLine> |
|
|||
data.offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data.offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].price |
нет | number:float | null |
4.99 |
|||
data.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data.crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
}
crossDockCreated
{
"data": {
"id": 5101,
"external_id": "ASN-XD-100245",
"domain_id": 3,
"status_id": 1,
"warehouse_id": 43,
"shop_id": 12,
"type_id": 3,
"type_code": "crossdock",
"counts": {
"expected": 35,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-08-03",
"crossdock_case": {
"id": 1001,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "draft",
"process_version": "direct_order_v1",
"version": 1
}
},
"meta": {
"api_version": "v2",
"command_replayed": false,
"crossdock_configuration": {
"physical_warehouse_id": 42,
"enabled": true,
"process_version": "direct_order_v1"
}
}
}
400 Некорректный запрос
AcceptanceCreateBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ErrorResponse |
Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field. |
|
||
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
IDEMPOTENCY_KEY_REQUIRED
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "IDEMPOTENCY_KEY_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
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 Конфликт
AcceptanceCreateConflict
The request conflicts with the current resource or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ErrorResponse |
Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field. |
|
||
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_COMMAND_CONFLICT
{
"message": "The request conflicts with the current resource or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_COMMAND_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
AcceptanceCreateValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ValidationErrorResponse |
Standard and return acceptances retain the existing API v2 error adapter. Cross-dock creation uses the strict validation envelope with meta.error_code and no top-level error field. |
|
||
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_WAREHOUSE_DISABLED
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_WAREHOUSE_DISABLED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
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"
}
Получить приемку
| operationId | getAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Возвращает один ресурс: приемка, если он существует и видим аутентифицированному аккаунту.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID приемки. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data.type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.counts |
да | AcceptanceCounts |
|
|||
data.counts.expected |
да | number:float |
10 |
|||
data.counts.accepted |
да | number:float |
0 |
|||
data.counts.placed |
да | number:float |
0 |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.offers |
нет | array<AcceptanceLine> |
|
|||
data.offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data.offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].price |
нет | number:float | null |
4.99 |
|||
data.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data.crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
}
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"
}
Обновить приемку
| operationId | replaceAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Updates an editable acceptance header and may upsert or delete lines. Closed or already processed documents reject changes with validation or lifecycle errors.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
ReplaceAcceptanceRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ReplaceAcceptancePayload |
Legacy PUT payload. Current backend applies partial-update semantics and may upsert or delete lines. | |
||
data.external_id |
нет | string | null |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.allow_add_offers_during_acceptance |
нет | boolean |
false |
|||
data.lines |
нет | array<AcceptanceLineUpsertPayload> |
|
|||
data.lines[] |
нет | AcceptanceLineUpsertPayload |
Payload строки приемки. Товар определяется по product_id или product_external_id. |
|
||
data.lines[] |
нет | object |
|
|||
data.lines[] |
нет | object |
|
|||
data.lines_delete |
нет | array<integer:int64> |
|
|||
data.lines_delete[] |
нет | integer:int64 |
min: 1 | 7101 |
Примеры запроса
default
{
"data": {
"comment": "Updated supplier note",
"lines_delete": [
7102
]
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data.type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.counts |
да | AcceptanceCounts |
|
|||
data.counts.expected |
да | number:float |
10 |
|||
data.counts.accepted |
да | number:float |
0 |
|||
data.counts.placed |
да | number:float |
0 |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.offers |
нет | array<AcceptanceLine> |
|
|||
data.offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data.offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].price |
нет | number:float | null |
4.99 |
|||
data.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data.crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Обновить приемку
| operationId | patchAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Partially updates an editable acceptance. Omitted fields are not changed.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
PatchAcceptanceRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | PatchAcceptancePayload |
Payload частичного обновления приемки. Пропущенные поля не изменяются. | |
||
data.external_id |
нет | string | null |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.allow_add_offers_during_acceptance |
нет | boolean |
false |
|||
data.lines |
нет | array<AcceptanceLineUpsertPayload> |
|
|||
data.lines[] |
нет | AcceptanceLineUpsertPayload |
Payload строки приемки. Товар определяется по product_id или product_external_id. |
|
||
data.lines[] |
нет | object |
|
|||
data.lines[] |
нет | object |
|
|||
data.lines_delete |
нет | array<integer:int64> |
|
|||
data.lines_delete[] |
нет | integer:int64 |
min: 1 | 7101 |
Примеры запроса
default
{
"data": {
"comment": "Updated supplier note"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data.type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.counts |
да | AcceptanceCounts |
|
|||
data.counts.expected |
да | number:float |
10 |
|||
data.counts.accepted |
да | number:float |
0 |
|||
data.counts.placed |
да | number:float |
0 |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.offers |
нет | array<AcceptanceLine> |
|
|||
data.offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data.offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].price |
нет | number:float | null |
4.99 |
|||
data.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data.crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Удалить приемку
| operationId | deleteAcceptances |
|---|---|
| Раздел | Приемки |
| Безопасность | 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/acceptances/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"
}
Cancel acceptance
| operationId | cancelAcceptance |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Cancels a standard or return acceptance in status 1 (new) or 7 (arrived). Cancellation is rejected when stock is already bound to a storage place. Cross-dock acceptances must use POST /api/v2/crossdock/cases/{case}/cancel.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/1001/cancel" \
--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 |
да | Acceptance |
Входящий документ приемки. Связанные поля присутствуют, когда контроллер их загрузил или они запрошены через 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 |
"ASN-100245" |
|||
data.document_barcode |
нет | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3, 4, 5, 6, 7 | 1 - new; 2 - accepting; 3 - checking; 4 - closed; 5 - deleted; 6 - cancelled; 7 - arrived at warehouse. |
1 |
|
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 — обычная приёмка; 2 — возврат; 3 — cross-dock-приёмка. После создания тип изменить нельзя. |
1 |
|
data.type_code |
нет | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
нет | string | null |
"Inbound from supplier" |
|||
data.counts |
да | AcceptanceCounts |
|
|||
data.counts.expected |
да | number:float |
10 |
|||
data.counts.accepted |
да | number:float |
0 |
|||
data.counts.placed |
да | number:float |
0 |
|||
data.acceptance_date |
нет | string:date | null |
"2026-07-14" |
|||
data.offers |
нет | array<AcceptanceLine> |
|
|||
data.offers[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
data.offers[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.offers[].price |
нет | number:float | null |
4.99 |
|||
data.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
data.crossdock_case |
нет | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
да | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
да | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
да | integer:int64 |
min: 1 | 1 |
||
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": 5101,
"external_id": "ASN-100245",
"document_barcode": "ASN-100245-BARCODE",
"domain_id": 3,
"status_id": 1,
"user_id": 9,
"warehouse_id": 42,
"shop_id": 12,
"type_id": 1,
"comment": "Inbound from supplier",
"counts": {
"expected": 10,
"accepted": 0,
"placed": 0
},
"acceptance_date": "2026-07-14",
"offers": [
{
"id": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Получить список приемок
| operationId | listAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Возвращает приемки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID приемки. | 1001 |
||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, product_id, expected_quantity, price, expiration_date, created_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
barcode |
query | нет | string |
form | true | Фильтр по barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[barcode], если это поддерживает Laravel query adapter. |
"4601234567890" |
|
batch |
query | нет | string |
form | true | Фильтр по batch с частичным текстовым совпадением. Этот фильтр также можно передать как filter[batch], если это поддерживает Laravel query adapter. |
"LOT-2026" |
|
expiration_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_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" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<AcceptanceLine> |
|
|||
data[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data[].price |
нет | number:float | null |
4.99 |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"product": {
"id": 1201,
"name": "Coffee 250g",
"external_id": "EXT-10045"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/acceptances/5101/lines",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Создать приемку
| operationId | createAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Create acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
AddAcceptanceLinesRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.lines |
да | array<AcceptanceLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
нет | AcceptanceLineCreatePayload |
Payload строки приемки. Товар определяется по product_id или product_external_id. |
|
||
data.lines[] |
нет | object |
|
|||
data.lines[] |
нет | object |
|
Примеры запроса
default
{
"data": {
"lines": [
{
"product_external_id": "EXT-10045",
"expected_quantity": 10
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<AcceptanceLine> |
|
|||
data[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data[].price |
нет | number:float | null |
4.99 |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Обновить приемку
| operationId | replaceAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
ReplaceAcceptanceLineRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLineReplacePayload |
Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление. | |
||
data.expected_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
Примеры запроса
default
{
"data": {
"expected_quantity": 12,
"batch": "LOT-2026"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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.acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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.accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Обновить приемку
| operationId | patchAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
PatchAcceptanceLineRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLinePatchPayload |
Редактируемые поля строки приемки. ID строки берется из path и не должен повторяться в body. | |
||
data.expected_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
Примеры запроса
default
{
"data": {
"expected_quantity": 12
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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.acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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.accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Удалить приемку
| operationId | deleteAcceptancesLines |
|---|---|
| Раздел | Приемки |
| Безопасность | 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/acceptances/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"
}
Создать приемку
| operationId | createAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Create acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
AddAcceptanceLinesRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.lines |
да | array<AcceptanceLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
нет | AcceptanceLineCreatePayload |
Payload строки приемки. Товар определяется по product_id или product_external_id. |
|
||
data.lines[] |
нет | object |
|
|||
data.lines[] |
нет | object |
|
Примеры запроса
default
{
"data": {
"lines": [
{
"product_external_id": "EXT-10045",
"expected_quantity": 10
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<AcceptanceLine> |
|
|||
data[] |
нет | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
да | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
да | number:float |
min: 0 | 0 |
||
data[].price |
нет | number:float | null |
4.99 |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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[].accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
нет | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Обновить приемку
| operationId | replaceAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | bearerAuth |
Update acceptance. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Этот маршрут /offers является совместимым alias для /lines; в новых интеграциях используйте маршрут /lines.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Response quantities are computed from active acceptance lines and warehouse facts, including pre-existing documents. Accepted and placed quantities differ until put-away. accepted_lots describes actual batches; top-level line lot fields remain the declared document data.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/acceptances/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" |
Тело запроса
ReplaceAcceptanceLineRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLineReplacePayload |
Legacy PUT payload строки. Текущий backend обрабатывает PUT как частичное обновление. | |
||
data.expected_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
Примеры запроса
default
{
"data": {
"expected_quantity": 12,
"batch": "LOT-2026"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AcceptanceLine |
Declared acceptance line plus live accepted/placed quantities and actual lot allocations. Placement requires a positive storage-place ID. Deleted warehouse rows are excluded. | |
||
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.acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
да | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
да | number:float |
min: 0 | 0 |
||
data.placed_quantity |
да | number:float |
min: 0 | 0 |
||
data.price |
нет | number:float | null |
4.99 |
|||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.barcode |
нет | string | null |
maxLength: 64 | "4601234567890" |
||
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.accepted_lots |
нет | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
нет | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
да | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
да | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
да | number:float |
min: 0 | 3 |
||
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": 7101,
"acceptance_id": 5101,
"product_id": 1201,
"expected_quantity": 10,
"accepted_quantity": 0,
"placed_quantity": 0,
"price": 4.99,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"barcode": "4601234567890",
"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"
}
Удалить приемку
| operationId | deleteAcceptancesOffers |
|---|---|
| Раздел | Приемки |
| Безопасность | 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/acceptances/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"
}
Аккаунт
Получить текущего пользователя
| operationId | getCurrentUser |
|---|---|
| Раздел | Аккаунт |
| Безопасность | bearerAuth |
Возвращает один ресурс: аккаунт, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/me" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
У операции нет path, query или header параметров.
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | User |
Аутентифицированный или видимый пользователь NWMS. | |
||
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.name |
да | string |
"Client Manager" |
|||
data.email |
да | string:email |
"client.manager@nwms.cloud" |
|||
data.language |
нет | string | null |
"en" |
|||
data.storage_id |
нет | string | null |
"default" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.data_scope |
нет | string | null |
"domain" |
|||
data.roles |
нет | array<string> |
|
|||
data.roles[] |
нет | string |
"clients" |
|||
data.domain |
нет | object | null |
|
|||
data.domain.id |
да | integer:int64 |
min: 1 | 3 |
||
data.domain.name |
да | string |
"Demo Domain" |
|||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
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": 15,
"name": "Client Manager",
"email": "client.manager@nwms.cloud",
"language": "en",
"storage_id": "default",
"domain_id": 3,
"warehouse_id": 42,
"parent_id": null,
"data_scope": "domain",
"roles": [
"clients"
],
"domain": {
"id": 3,
"name": "Demo Domain"
},
"warehouse": {
"id": 42,
"name": "Warehouse Sofia"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
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"
}
Closed Boxes
List closed boxes currently in stock
| operationId | listClosedBoxes |
|---|---|
| Раздел | Closed Boxes |
| Безопасность | bearerAuth |
Returns only sealed physical handling units that have a unique SSCC and a positive current warehouse ledger row. Each result represents one unique physical box, so balance=1 and balance_unit=box. warehouse_id identifies the client stock warehouse; physical_warehouse_id identifies the fulfillment warehouse where the box is physically located.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes" \
--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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, sscc, warehouse_id, physical_warehouse_id, created_at, updated_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
public_id |
query | нет | string |
form | true | Фильтр по public_id с точным совпадением. Этот фильтр также можно передать как filter[public_id], если это поддерживает Laravel query adapter. |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|
sscc |
query | нет | string |
form | true | Фильтр по sscc с точным совпадением. Этот фильтр также можно передать как filter[sscc], если это поддерживает Laravel query adapter. |
"038123450000000013" |
|
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
physical_warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по physical_warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[physical_warehouse_id], если это поддерживает Laravel query adapter. |
41 |
package_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по package_product_id с точным совпадением. Этот фильтр также можно передать как filter[package_product_id], если это поддерживает Laravel query adapter. |
1202 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
case_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по case_id с точным совпадением. Этот фильтр также можно передать как filter[case_id], если это поддерживает Laravel query adapter. |
1 |
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:date |
form | true | Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<ClosedBox> |
|
|||
data[] |
нет | ClosedBox |
One sealed physical handling unit identified by a unique SSCC and currently present in warehouse stock. warehouse_id is the client stock warehouse; physical_warehouse_id is the fulfillment warehouse where the box is physically located. |
|
||
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[].public_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].sscc |
да | string |
minLength: 18 maxLength: 18 pattern: ^\d{18}$ |
Unique normalized GS1 SSCC. Leading zeroes are preserved. | "038123450000000013" |
|
data[].warehouse_id |
да | integer:int64 | null |
min: 1 | 42 |
||
data[].warehouse_name |
да | string | null |
"Client warehouse Sofia" |
|||
data[].physical_warehouse_id |
да | integer:int64 |
min: 1 | 41 |
||
data[].physical_warehouse_name |
да | string | null |
"FF warehouse Sofia" |
|||
data[].balance |
да | enum:int64 |
min: 1 max: 1 enum: 1 |
Current balance of this unique SSCC in boxes. A row is returned only while the sealed box is in stock, therefore the value is always 1. | 1 |
|
data[].balance_unit |
да | enum |
enum: box | "box" |
||
data[].status |
да | string |
"routed" |
|||
data[].seal_state |
да | enum |
enum: sealed | "sealed" |
||
data[].box_type |
да | string |
"box" |
|||
data[].barcode |
да | string |
minLength: 1 maxLength: 190 |
"038123450000000013" |
||
data[].package_product_id |
да | integer:int64 | null |
min: 1 | 1202 |
||
data[].package_product_name |
да | string | null |
"Coffee box 12" |
|||
data[].container_place_id |
да | integer:int64 | null |
min: 1 | 5501 |
||
data[].place_id |
да | integer:int64 | null |
min: 1 | 501 |
||
data[].place_barcode |
да | string | null |
"SHELF-501" |
|||
data[].contents |
да | array<ClosedBoxItem> |
|
|||
data[].contents[] |
нет | ClosedBoxItem |
|
|||
data[].contents[].product_id |
да | integer:int64 |
min: 1 | 1202 |
||
data[].contents[].product_name |
да | string | null |
"Coffee box 12" |
|||
data[].contents[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].contents[].base_product_name |
да | string | null |
"Coffee 250g" |
|||
data[].contents[].quantity |
да | number:float |
min: 0 | Recorded quantity in product units. For a quant product this is the number of boxes. | 1 |
|
data[].contents[].base_quantity |
да | number:float |
min: 0 | Recorded quantity converted to base product units. | 12 |
|
data[].contents[].current_quantity |
да | number:float |
min: 0 | Current positive quantity in the warehouse ledger row linked to this box content. | 1 |
|
data[].contents[].batch |
да | string | null |
"LOT-2026" |
|||
data[].contents[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].contents[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
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": 5501,
"public_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"sscc": "038123450000000013",
"warehouse_id": 42,
"warehouse_name": "Client warehouse Sofia",
"physical_warehouse_id": 41,
"physical_warehouse_name": "FF warehouse Sofia",
"balance": 1,
"balance_unit": "box",
"status": "routed",
"seal_state": "sealed",
"box_type": "box",
"barcode": "038123450000000013",
"package_product_id": 1202,
"package_product_name": "Coffee box 12",
"container_place_id": 5501,
"place_id": 501,
"place_barcode": "SHELF-501",
"contents": [
{
"product_id": 1202,
"product_name": "Coffee box 12",
"base_product_id": 1201,
"base_product_name": "Coffee 250g",
"quantity": 1,
"base_quantity": 12,
"current_quantity": 1,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15"
}
],
"created_at": "2026-08-12T09:00:00Z",
"updated_at": "2026-08-12T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/closed-boxes?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/closed-boxes",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Get one closed box
| operationId | getClosedBox |
|---|---|
| Раздел | Closed Boxes |
| Безопасность | bearerAuth |
Returns one current sealed box by internal numeric ID, public UUID, or exact 18-digit SSCC. Opened, shipped, cancelled, consumed, expected-only, and zero-balance handling units return 404.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes/038123450000000013" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
box |
path | да | string |
Closed box internal ID, public UUID, or 18-digit SSCC. | "038123450000000013" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ClosedBox |
One sealed physical handling unit identified by a unique SSCC and currently present in warehouse stock. warehouse_id is the client stock warehouse; physical_warehouse_id is the fulfillment warehouse where the box is physically located. |
|
||
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.public_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.sscc |
да | string |
minLength: 18 maxLength: 18 pattern: ^\d{18}$ |
Unique normalized GS1 SSCC. Leading zeroes are preserved. | "038123450000000013" |
|
data.warehouse_id |
да | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse_name |
да | string | null |
"Client warehouse Sofia" |
|||
data.physical_warehouse_id |
да | integer:int64 |
min: 1 | 41 |
||
data.physical_warehouse_name |
да | string | null |
"FF warehouse Sofia" |
|||
data.balance |
да | enum:int64 |
min: 1 max: 1 enum: 1 |
Current balance of this unique SSCC in boxes. A row is returned only while the sealed box is in stock, therefore the value is always 1. | 1 |
|
data.balance_unit |
да | enum |
enum: box | "box" |
||
data.status |
да | string |
"routed" |
|||
data.seal_state |
да | enum |
enum: sealed | "sealed" |
||
data.box_type |
да | string |
"box" |
|||
data.barcode |
да | string |
minLength: 1 maxLength: 190 |
"038123450000000013" |
||
data.package_product_id |
да | integer:int64 | null |
min: 1 | 1202 |
||
data.package_product_name |
да | string | null |
"Coffee box 12" |
|||
data.container_place_id |
да | integer:int64 | null |
min: 1 | 5501 |
||
data.place_id |
да | integer:int64 | null |
min: 1 | 501 |
||
data.place_barcode |
да | string | null |
"SHELF-501" |
|||
data.contents |
да | array<ClosedBoxItem> |
|
|||
data.contents[] |
нет | ClosedBoxItem |
|
|||
data.contents[].product_id |
да | integer:int64 |
min: 1 | 1202 |
||
data.contents[].product_name |
да | string | null |
"Coffee box 12" |
|||
data.contents[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.contents[].base_product_name |
да | string | null |
"Coffee 250g" |
|||
data.contents[].quantity |
да | number:float |
min: 0 | Recorded quantity in product units. For a quant product this is the number of boxes. | 1 |
|
data.contents[].base_quantity |
да | number:float |
min: 0 | Recorded quantity converted to base product units. | 12 |
|
data.contents[].current_quantity |
да | number:float |
min: 0 | Current positive quantity in the warehouse ledger row linked to this box content. | 1 |
|
data.contents[].batch |
да | string | null |
"LOT-2026" |
|||
data.contents[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data.contents[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
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": 5501,
"public_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"sscc": "038123450000000013",
"warehouse_id": 42,
"warehouse_name": "Client warehouse Sofia",
"physical_warehouse_id": 41,
"physical_warehouse_name": "FF warehouse Sofia",
"balance": 1,
"balance_unit": "box",
"status": "routed",
"seal_state": "sealed",
"box_type": "box",
"barcode": "038123450000000013",
"package_product_id": 1202,
"package_product_name": "Coffee box 12",
"container_place_id": 5501,
"place_id": 501,
"place_barcode": "SHELF-501",
"contents": [
{
"product_id": 1202,
"product_name": "Coffee box 12",
"base_product_id": 1201,
"base_product_name": "Coffee 250g",
"quantity": 1,
"base_quantity": 12,
"current_quantity": 1,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15"
}
],
"created_at": "2026-08-12T09:00:00Z",
"updated_at": "2026-08-12T09:30:00Z"
},
"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"
}
DataMatrix
Получить список DataMatrix
| operationId | listDataMatrix |
|---|---|
| Раздел | DataMatrix |
| Безопасность | bearerAuth |
Returns codes visible to the authenticated account. accepted_at and shipped_at are read-only ISO 8601 timestamps with an explicit installation timezone offset, or null. Each is the latest recorded acceptance/shipment event for this code in its CURRENT domain and warehouse; document dates and marking/extinguishing dates are never substituted. Historical events not recorded by the system remain null. Import and manual status changes do not create physical acceptance/shipment events. These fields are available from GET /api/v2/datamatrix; do not send them to create/status commands.
Use accepted_at_from / accepted_at_to or shipped_at_from / shipped_at_to at the query root or inside filter[...]. A YYYY-MM-DD boundary is interpreted in the installation timezone; _to includes the entire day. An ISO timestamp must include seconds and Z or an explicit offset (e.g. 2026-10-22T10:00:00+03:00); fractional seconds are not accepted. Exact time boundaries are inclusive and compared in UTC. Encode + as %2B in URLs, or use curl --data-urlencode. Invalid dates, arrays and reversed ranges return HTTP 422. Either bound may be omitted; different field ranges are combined with AND. Null dates do not match a nonempty range.
Sort by accepted_at, shipped_at (prefix - for descending); comma-separated sort keys are supported. Equal values use the code ID ascending as a final tie-breaker. Nulls sort first ascending and last descending. Without the lifecycle event table these fields are null and event date filters return an empty list. This table is required for operational date tracking. Date ranges select the latest per-code event, not an event history or a reliable incremental change cursor.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/datamatrix" \
--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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields: id, status_id, warehouse_id, created_at, updated_at, used_at, accepted_at, shipped_at. Prefix - for descending. Default: -id. Equal values use code ID ascending as a final tie-breaker. Nulls first ascending, last descending. | "-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status_id |
query | нет | DataMatrixStatusId |
form | true | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
|
|
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
acceptance_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по acceptance_id с точным совпадением. Этот фильтр также можно передать как filter[acceptance_id], если это поддерживает Laravel query adapter. |
1 |
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
barcode |
query | нет | string |
form | true | Фильтр по barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[barcode], если это поддерживает Laravel query adapter. |
"4601234567890" |
|
datamatrix |
query | нет | string |
form | true | Фильтр по datamatrix с частичным текстовым совпадением. Этот фильтр также можно передать как filter[datamatrix], если это поддерживает Laravel query adapter. |
"010460123456789021ABC123" |
|
short_code |
query | нет | string |
form | true | Фильтр по short_code с частичным текстовым совпадением. Этот фильтр также можно передать как filter[short_code], если это поддерживает Laravel query adapter. |
"ABC123" |
|
batch |
query | нет | string |
form | true | Фильтр по batch с частичным текстовым совпадением. Этот фильтр также можно передать как filter[batch], если это поддерживает Laravel query adapter. |
"LOT-2026" |
|
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" |
|
used_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для used_at. Этот фильтр также можно передать как filter[used_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
used_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для used_at. Этот фильтр также можно передать как filter[used_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
production_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
accepted_at_from |
query | нет | string |
Inclusive lower bound for accepted_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[accepted_at_from]. Invalid/reversed bounds: 422. | "2026-10-22" |
|||
accepted_at_to |
query | нет | string |
Upper bound for accepted_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[accepted_at_to]. Invalid/reversed bounds: 422. | "2026-10-22" |
|||
shipped_at_from |
query | нет | string |
Inclusive lower bound for shipped_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[shipped_at_from]. Invalid/reversed bounds: 422. | "2026-10-22" |
|||
shipped_at_to |
query | нет | string |
Upper bound for shipped_at. YYYY-MM-DD (installation timezone, full end day) or ISO 8601 with seconds and Z/offset (inclusive exact time). No fractional seconds. Also accepts filter[shipped_at_to]. Invalid/reversed bounds: 422. | "2026-10-22" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<DataMatrix> |
|
|||
data[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
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": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 0,
"acceptance_id": 5101,
"order_id": null,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-10-19",
"used_at": null,
"accepted_at": "2026-10-22T10:00:00+03:00",
"shipped_at": null
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/datamatrix?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/datamatrix",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
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."
]
}
}
Создать DataMatrix
| operationId | createDataMatrix |
|---|---|
| Раздел | DataMatrix |
| Безопасность | bearerAuth |
Imports one or more DataMatrix codes. Batch rate limits and idempotency protect repeated imports.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/datamatrix" \
--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" |
Тело запроса
CreateDataMatrixRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateDataMatrixItemPayload |
|
|||
data |
да | array<CreateDataMatrixItemPayload> |
minItems: 1 maxItems: 5000 |
|
||
data |
да | object |
|
|||
data.items |
да | array<CreateDataMatrixItemPayload> |
minItems: 1 maxItems: 5000 |
|
Примеры запроса
default
{
"data": {
"items": [
{
"warehouse_id": 42,
"product_id": 1201,
"barcode": "04601234567890",
"datamatrix": "010460123456789021ABC123"
},
{
"warehouse_id": 42,
"product_id": 1201,
"barcode": "04601234567891",
"datamatrix": "010460123456789021ABC124"
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | DataMatrixImportResult |
|
|||
data.created |
да | integer:int64 |
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": {
"created": 2
},
"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"
}
Удалить DataMatrix
| operationId | deleteDataMatrix |
|---|---|
| Раздел | DataMatrix |
| Безопасность | 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.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Listing without order_id is supported. order_id accepts one value, comma-separated values or repeated array parameters; order_ids is unsupported. Statuses: 0 unused, 1 in warehouse (possibly assigned to an order), 2 extinguished. created_at and used_at have date precision; there is no reliable updated_at/change cursor for reassignment or cancellation.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/datamatrix" \
--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" |
Тело запроса
DeleteDataMatrixRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | DataMatrixIdsPayload |
|
|||
data.ids |
да | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
нет | integer:int64 |
min: 1 | 6101 |
Примеры запроса
default
{
"data": {
"ids": [
6101,
6102
]
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | DataMatrixDeleteResult |
|
|||
data.deleted |
да | integer:int64 |
min: 0 | 1 |
||
data.skipped |
да | integer:int64 |
min: 0 | 1 |
||
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": {
"deleted": 1,
"skipped": 1
},
"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"
}
Обновить статус DataMatrix
| operationId | updateDataMatrixStatus |
|---|---|
| Раздел | DataMatrix |
| Безопасность | bearerAuth |
Changes the status of multiple DataMatrix codes after verifying all IDs belong to the caller visible domain.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/datamatrix/status" \
--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" |
Тело запроса
ReplaceDataMatrixStatusRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.ids |
да | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
нет | integer:int64 |
min: 1 | 6101 |
||
data.status_id |
да | DataMatrixStatusId |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
Примеры запроса
default
{
"data": {
"ids": [
6101,
6102
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | DataMatrixStatusUpdateResult |
|
|||
data.updated |
да | integer:int64 |
min: 0 | 2 |
||
data.dmt_status |
да | DataMatrixStatusId |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
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": {
"updated": 2,
"dmt_status": 1
},
"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"
}
Обновить статус DataMatrix
| operationId | updateDataMatrixStatusByPath |
|---|---|
| Раздел | DataMatrix |
| Безопасность | bearerAuth |
Update DataMatrix status. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/datamatrix/status" \
--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" |
Тело запроса
PatchDataMatrixStatusRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.ids |
да | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
нет | integer:int64 |
min: 1 | 6101 |
||
data.status_id |
да | DataMatrixStatusId |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
Примеры запроса
default
{
"data": {
"ids": [
6101,
6102
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | DataMatrixStatusUpdateResult |
|
|||
data.updated |
да | integer:int64 |
min: 0 | 2 |
||
data.dmt_status |
да | DataMatrixStatusId |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
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": {
"updated": 2,
"dmt_status": 1
},
"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"
}
Платежи доставки
Получить список платежей доставки
| operationId | listOrderDeliveryPayments |
|---|---|
| Раздел | Платежи доставки |
| Безопасность | bearerAuth |
Возвращает платежи доставки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/order-delivery-payments" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, order_id, track_id, delivery_sum, cod_sum, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
status_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
1 |
payment_order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по payment_order_id с точным совпадением. Этот фильтр также можно передать как filter[payment_order_id], если это поддерживает Laravel query adapter. |
9401 |
transaction_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по transaction_id с точным совпадением. Этот фильтр также можно передать как filter[transaction_id], если это поддерживает Laravel query adapter. |
9501 |
cod_act_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по cod_act_id с точным совпадением. Этот фильтр также можно передать как filter[cod_act_id], если это поддерживает Laravel query adapter. |
9601 |
track_id |
query | нет | string |
form | true | Фильтр по track_id с частичным текстовым совпадением. Этот фильтр также можно передать как filter[track_id], если это поддерживает Laravel query adapter. |
"CDEK-123456789" |
|
etalon_order_id |
query | нет | string |
form | true | Фильтр по etalon_order_id с частичным текстовым совпадением. Этот фильтр также можно передать как filter[etalon_order_id], если это поддерживает Laravel query adapter. |
"EXT-10045" |
|
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:date |
form | true | Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
delivery_sum_from |
query | нет | number:float |
form | true | Нижняя включительная числовая граница для delivery_sum. Этот фильтр также можно передать как filter[delivery_sum_from], если это поддерживает Laravel query adapter. |
48.58 |
|
delivery_sum_to |
query | нет | number:float |
form | true | Верхняя включительная числовая граница для delivery_sum. Этот фильтр также можно передать как filter[delivery_sum_to], если это поддерживает Laravel query adapter. |
48.58 |
|
cod_sum_from |
query | нет | number:float |
form | true | Нижняя включительная числовая граница для cod_sum. Этот фильтр также можно передать как filter[cod_sum_from], если это поддерживает Laravel query adapter. |
48.58 |
|
cod_sum_to |
query | нет | number:float |
form | true | Верхняя включительная числовая граница для cod_sum. Этот фильтр также можно передать как filter[cod_sum_to], если это поддерживает Laravel query adapter. |
48.58 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<OrderDeliveryPayment> |
|
|||
data[] |
нет | OrderDeliveryPayment |
Строка сверки платежей доставки. | |
||
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[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].track_id |
нет | string | null |
"CDEK-123456789" |
|||
data[].amounts |
да | OrderDeliveryPaymentAmounts |
|
|||
data[].amounts.delivery_sum |
нет | number:float | null |
8.6 |
|||
data[].amounts.delivery_tax |
нет | number:float | null |
1.72 |
|||
data[].amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data[].amounts.cod_agent_sum |
нет | number:float | null |
1.5 |
|||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].payment_order_id |
нет | integer:int64 | null |
min: 1 | 9401 |
||
data[].etalon_order_id |
нет | string | null |
"EXT-10045" |
|||
data[].transaction_id |
нет | integer:int64 | null |
min: 1 | 9501 |
||
data[].cod_act_id |
нет | integer:int64 | null |
min: 1 | 9601 |
||
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": 9301,
"domain_id": 3,
"order_id": 8101,
"track_id": "CDEK-123456789",
"amounts": {
"delivery_sum": 8.6,
"delivery_tax": 1.72,
"cod_sum": 48.58,
"cod_agent_sum": 1.5
},
"status_id": 1,
"payment_order_id": 9401,
"etalon_order_id": "EXT-10045",
"transaction_id": 9501,
"cod_act_id": 9601,
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/order-delivery-payments",
"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"
}
Визиты погрузки
Получить список визитов погрузки
| operationId | listLoadingVisits |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Возвращает визиты погрузки, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, planned_at, registered_at, queue_number, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
client_warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по client_warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[client_warehouse_id], если это поддерживает Laravel query adapter. |
43 |
shop_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по shop_id с точным совпадением. Этот фильтр также можно передать как filter[shop_id], если это поддерживает Laravel query adapter. |
12 |
type |
query | нет | LoadingVisitType |
form | true | Фильтр по type с точным совпадением. Этот фильтр также можно передать как filter[type], если это поддерживает Laravel query adapter. |
|
|
status |
query | нет | LoadingVisitStatus |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
|
|
document_type |
query | нет | LoadingVisitDocumentType |
form | true | Фильтр по document_type с точным совпадением. Этот фильтр также можно передать как filter[document_type], если это поддерживает Laravel query adapter. |
|
|
document_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по document_id с точным совпадением. Этот фильтр также можно передать как filter[document_id], если это поддерживает Laravel query adapter. |
5101 |
driver_phone |
query | нет | string |
form | true | Фильтр по driver_phone с частичным текстовым совпадением. Этот фильтр также можно передать как filter[driver_phone], если это поддерживает Laravel query adapter. |
"+359888123456" |
|
driver_name |
query | нет | string |
form | true | Фильтр по driver_name с частичным текстовым совпадением. Этот фильтр также можно передать как filter[driver_name], если это поддерживает Laravel query adapter. |
"Ivan Petrov" |
|
vehicle_number |
query | нет | string |
form | true | Фильтр по vehicle_number с частичным текстовым совпадением. Этот фильтр также можно передать как filter[vehicle_number], если это поддерживает Laravel query adapter. |
"CB1234AB" |
|
planned_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для planned_at. Этот фильтр также можно передать как filter[planned_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
planned_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для planned_at. Этот фильтр также можно передать как filter[planned_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
registered_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для registered_at. Этот фильтр также можно передать как filter[registered_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
registered_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для registered_at. Этот фильтр также можно передать как filter[registered_at_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" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<LoadingVisit> |
|
|||
data[] |
нет | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data[].type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data[].status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data[].queue_number |
нет | integer:int64 | null |
17 |
|||
data[].driver |
да | LoadingVisitDriver |
|
|||
data[].driver.phone |
нет | string | null |
"+359888123456" |
|||
data[].driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data[].driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data[].document |
да | LoadingVisitDocument |
|
|||
data[].document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data[].document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data[].planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data[].registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data[].called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].comment |
нет | string | null |
"ASN-100245" |
|||
data[].warehouse_comment |
нет | string | null |
"Gate 2" |
|||
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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/loading/visits",
"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"
}
Создать визит погрузки
| operationId | createLoadingVisits |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Creates a loading or unloading visit for a warehouse slot. Driver, document link, planned time, and gate fields are validated against the user visible scope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/loading/visits" \
--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" |
Тело запроса
CreateLoadingVisitRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateLoadingVisitPayload |
|
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.driver |
нет | object | null |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
нет | object | null |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
Примеры запроса
default
{
"data": {
"type": "inbound",
"warehouse_id": 42,
"planned_at": "2026-07-14T10:00:00Z",
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
}
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data.queue_number |
нет | integer:int64 | null |
17 |
|||
data.driver |
да | LoadingVisitDriver |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
да | LoadingVisitDocument |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
нет | string | null |
"Gate 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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"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"
}
Получить визит погрузки
| operationId | getLoadingVisits |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Возвращает один ресурс: визит погрузки, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID визита погрузки. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data.queue_number |
нет | integer:int64 | null |
17 |
|||
data.driver |
да | LoadingVisitDriver |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
да | LoadingVisitDocument |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
нет | string | null |
"Gate 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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Обновить визит погрузки
| operationId | replaceLoadingVisits |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Update loading visit. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/loading/visits/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" |
Тело запроса
ReplaceLoadingVisitRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type |
нет | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.driver |
нет | object | null |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
нет | object | null |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
Примеры запроса
default
{
"data": {
"planned_at": "2026-07-14T11:00:00Z",
"gate_id": 3
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data.queue_number |
нет | integer:int64 | null |
17 |
|||
data.driver |
да | LoadingVisitDriver |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
да | LoadingVisitDocument |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
нет | string | null |
"Gate 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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"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"
}
Обновить визит погрузки
| operationId | patchLoadingVisits |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Update loading visit. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/loading/visits/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" |
Тело запроса
PatchLoadingVisitRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.type |
нет | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.driver |
нет | object | null |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
нет | object | null |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
Примеры запроса
default
{
"data": {
"gate_id": 3
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data.queue_number |
нет | integer:int64 | null |
17 |
|||
data.driver |
да | LoadingVisitDriver |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
да | LoadingVisitDocument |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
нет | string | null |
"Gate 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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"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"
}
Отменить визит погрузки
| operationId | cancelLoadingVisitByPath |
|---|---|
| Раздел | Визиты погрузки |
| Безопасность | bearerAuth |
Cancel loading visit. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/loading/visits/1001/cancel" \
--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 |
да | LoadingVisit |
Запланированный визит погрузки или разгрузки. | |
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.type |
да | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
да | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Статус жизненного цикла визита погрузки, хранящийся в rwLoadingVisit. |
"waiting" |
|
data.queue_number |
нет | integer:int64 | null |
17 |
|||
data.driver |
да | LoadingVisitDriver |
|
|||
data.driver.phone |
нет | string | null |
"+359888123456" |
|||
data.driver.name |
нет | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
нет | string | null |
"CB1234AB" |
|||
data.document |
да | LoadingVisitDocument |
|
|||
data.document.type |
нет | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
нет | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
нет | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
нет | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
нет | string | null |
"Gate 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": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"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"
}
Шаблоны уведомлений
Получить список шаблонов уведомлений
| operationId | listNotificationTemplates |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns a tenant-scoped, paginated list of document-status notification templates.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates" \
--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: 250 |
Number of templates per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | Comma-separated sort fields: id, name, channel, document_type, document_status_id, delay_hours, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
|
include |
query | нет | enum |
form | false | enum: bindings | Set to bindings to include warehouse bindings in every list item. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"bindings" |
filter[id] |
query | нет | integer:int64 |
min: 0 | Exact template ID. | 41 |
||
filter[name] |
query | нет | string |
Case-insensitive partial template name. | "Acceptance closed" |
|||
filter[channel] |
query | нет | enum |
enum: email, internal | Exact delivery channel. | "email" |
||
filter[document_type] |
query | нет | enum |
enum: acceptance, order | Exact document type. | "acceptance" |
||
filter[document_status_id] |
query | нет | integer:int64 |
min: 0 | Exact target document status ID. | 4 |
||
filter[status_id] |
query | нет | integer:int64 |
min: 0 | Exact template status: 0 or 1. | 1 |
||
filter[owner_user_id] |
query | нет | integer:int64 |
min: 0 | Exact owner user ID. | 15 |
||
created_at_from |
query | нет | string:date-time |
form | true | Created-at lower boundary. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-01T00:00:00Z" |
|
created_at_to |
query | нет | string:date-time |
form | true | Created-at upper boundary. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-31T23:59:59Z" |
|
updated_at_from |
query | нет | string:date-time |
form | true | Updated-at lower boundary. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-01T00:00:00Z" |
|
updated_at_to |
query | нет | string:date-time |
form | true | Updated-at upper boundary. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-31T23:59:59Z" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<NotificationTemplate> |
|
|||
data[] |
нет | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
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[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data[].name |
да | string |
"Acceptance closed" |
|||
data[].event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data[].channel |
да | enum |
enum: email, internal | "email" |
||
data[].document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data[].document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data[].delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data[].start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data[].conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data[].subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data[].body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data[].body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data[].attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data[].bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data[].bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data[].bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data[].bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse |
нет | object | null |
|
|||
data[].bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data[].bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data[].bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data[].bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data[].bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data[].bindings[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/notification-templates?page=1",
"prev": null,
"next": null
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://betawms.ffcdek.ru/api/v2/notification-templates",
"per_page": 50,
"to": 1,
"total": 1
}
}
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"
}
Создать шаблон уведомления
| operationId | createNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Creates a notification template in the authenticated user domain. Domain, owner and event are assigned server-side.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates" \
--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" |
Тело запроса
CreateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateNotificationTemplatePayload |
|
|||
data.name |
да | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Получить шаблон с привязками
| operationId | getNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns one visible template with its current warehouse bindings.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"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"
}
Изменить шаблон уведомления
| operationId | replaceNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--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 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplatePayload |
|
|||
data.name |
нет | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
нет | enum |
enum: email, internal | "email" |
||
data.document_type |
нет | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
нет | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Изменить шаблон уведомления
| operationId | patchNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--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 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplatePayload |
|
|||
data.name |
нет | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
нет | enum |
enum: email, internal | "email" |
||
data.document_type |
нет | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
нет | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
нет | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
нет | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
нет | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
нет | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
нет | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
нет | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"name": "Acceptance closed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplate |
Template used when an acceptance or order enters the configured status. The bindings field is returned by the item endpoint and by list requests with include=bindings. |
|
||
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.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
да | integer:int64 | null |
min: 1 | 15 |
||
data.name |
да | string |
"Acceptance closed" |
|||
data.event |
да | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
да | enum |
enum: email, internal | "email" |
||
data.document_type |
да | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
да | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
да | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
да | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
да | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
да | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
да | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
да | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
да | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
да | integer:int64 |
min: 0 | 1 |
||
data.bindings |
нет | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
нет | object | null |
|
|||
data.bindings[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 41,
"domain_id": 3,
"owner_user_id": 15,
"name": "Acceptance closed",
"event": "document.status_changed",
"channel": "email",
"document_type": "acceptance",
"document_status_id": 4,
"delay_hours": 0,
"start_document_id": null,
"conditions": {
"acceptance_has_discrepancy": true
},
"subject": "Document #{doc_id}: {doc_status_name}",
"body_html": "<p>Document #{doc_id} is closed.</p>",
"body_text": null,
"attachment_print_template_id": 12,
"status_id": 1,
"bindings_count": 1,
"bindings": [
{
"id": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Удалить шаблон уведомления
| operationId | deleteNotificationTemplate |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Deletes the template and its warehouse bindings in one transaction. Existing notification-message history is preserved.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
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 |
Примеры ответа
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
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"
}
Получить список складских привязок
| operationId | listNotificationTemplateBindings |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns the paginated warehouse and recipient bindings of one visible template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
page |
query | нет | integer:int64 |
form | true | min: 1 | Номер страницы. Этот фильтр также можно передать как filter[page], если это поддерживает Laravel query adapter. |
1 |
per_page |
query | нет | integer:int64 |
form | true | min: 1 max: 250 |
Number of bindings per page. Default 50; maximum 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | Comma-separated sort fields: id, warehouse_id, status_id, created_at, updated_at. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
|
filter[id] |
query | нет | integer:int64 |
min: 0 | Exact binding ID. | 7 |
||
filter[warehouse_id] |
query | нет | integer:int64 |
min: 0 | Exact warehouse ID. | 42 |
||
filter[status_id] |
query | нет | integer:int64 |
min: 0 | Exact binding status: 0 or 1. | 1 |
||
filter[internal_recipient_mode] |
query | нет | enum |
enum: warehouse_users, domain_users, explicit | Exact internal recipient mode. | "warehouse_users" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<NotificationTemplateBinding> |
|
|||
data[] |
нет | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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[].template_id |
да | integer:int64 |
min: 1 | 41 |
||
data[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse |
нет | object | null |
|
|||
data[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data[].recipients |
да | array<string:email> |
maxItems: 100 | |
||
data[].recipients[] |
нет | string:email |
"client@example.com" |
|||
data[].internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data[].internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data[].status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings?page=1",
"prev": null,
"next": null
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://betawms.ffcdek.ru/api/v2/notification-templates/41/bindings",
"per_page": 50,
"to": 1,
"total": 1
}
}
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"
}
Создать складскую привязку
| operationId | createNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Binds one visible client warehouse to the template. A warehouse can be bound only once per template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--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 | Notification template ID. | 41 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CreateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Получить складскую привязку
| operationId | getNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Returns one warehouse and recipient binding of a visible template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00:00Z"
},
"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"
}
Изменить складскую привязку
| operationId | replaceNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--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 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
нет | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Изменить складскую привязку
| operationId | patchNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--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 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
UpdateNotificationTemplateBindingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
нет | integer:int64 |
min: 1 | 42 |
||
data.recipients |
нет | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
нет | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
нет | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
нет | enum:int64 |
enum: 0, 1 | 1 |
Примеры запроса
Пример
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
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.template_id |
да | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Client Warehouse Sofia" |
|||
data.recipients |
да | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
нет | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
да | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
да | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
нет | integer:int64 |
min: 1 | 15 |
||
data.status_id |
да | enum:int64 |
enum: 0, 1 | 1 |
||
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": 7,
"template_id": 41,
"domain_id": 3,
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Client Warehouse Sofia"
},
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1,
"created_at": "2026-09-17T09:00:00Z",
"updated_at": "2026-09-17T09:00: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"
}
Удалить складскую привязку
| operationId | deleteNotificationTemplateBinding |
|---|---|
| Раздел | Шаблоны уведомлений |
| Безопасность | bearerAuth |
Removes one warehouse and recipient binding from the template.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request DELETE "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | да | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
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 |
Примеры ответа
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
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"
}
Заказы
Получить список заказов
| operationId | listOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Создать заказ
| operationId | createOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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 |
нет | oneOf<string | integer> |
|
|||
data.group_id |
нет | string |
maxLength: 255 | "2ФИС" |
||
data.group_id |
нет | integer |
Legacy numeric identifiers are also accepted. | |
||
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"
}
Получить заказ
| operationId | getOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Обновить заказ
| operationId | replaceOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Обновить заказ
| operationId | patchOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Удалить заказ
| operationId | deleteOrders |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Export Ozon and Wildberries interaction history for one order
| operationId | getOrderIntegrationEvents |
|---|---|
| Раздел | Заказы |
| Безопасность | 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.
Тело ответа отсутствует.
Создать заказ
| operationId | createOrdersLines |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Обновить заказ
| operationId | replaceOrdersLines |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Обновить заказ
| operationId | patchOrdersLines |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Удалить заказ
| operationId | deleteOrdersLines |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Создать заказ
| operationId | createOrdersOffers |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Обновить заказ
| operationId | replaceOrdersOffers |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Удалить заказ
| operationId | deleteOrdersOffers |
|---|---|
| Раздел | Заказы |
| Безопасность | 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"
}
Товары
Получить список товаров
| operationId | listProducts |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Возвращает товары, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, name, article, sku, price, created_at, updated_at, inventory_updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
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" |
|
shop_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по shop_id с точным совпадением. Этот фильтр также можно передать как filter[shop_id], если это поддерживает Laravel query adapter. |
12 |
status_id |
query | нет | ProductStatusId |
form | true | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
|
|
type_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по type_id с точным совпадением. Этот фильтр также можно передать как filter[type_id], если это поддерживает Laravel query adapter. |
1 |
package_kind |
query | нет | string |
form | true | Фильтр по package_kind с точным совпадением. Этот фильтр также можно передать как filter[package_kind], если это поддерживает Laravel query adapter. |
"unit" |
|
parent_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по parent_product_id с точным совпадением. Этот фильтр также можно передать как filter[parent_product_id], если это поддерживает Laravel query adapter. |
1200 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
datamatrix_required |
query | нет | boolean |
form | true | Фильтр по datamatrix_required с точным совпадением. Этот фильтр также можно передать как filter[datamatrix_required], если это поддерживает Laravel query adapter. |
false |
|
expiration_required |
query | нет | boolean |
form | true | Фильтр по expiration_required с точным совпадением. Этот фильтр также можно передать как filter[expiration_required], если это поддерживает Laravel query adapter. |
false |
|
name |
query | нет | string |
form | true | Фильтр по name с частичным текстовым совпадением. Этот фильтр также можно передать как filter[name], если это поддерживает Laravel query adapter. |
"Coffee" |
|
article |
query | нет | string |
form | true | Фильтр по article с частичным текстовым совпадением. Этот фильтр также можно передать как filter[article], если это поддерживает Laravel query adapter. |
"ART-001245" |
|
sku |
query | нет | string |
form | true | Фильтр по sku с частичным текстовым совпадением. Этот фильтр также можно передать как filter[sku], если это поддерживает Laravel query adapter. |
"SKU-001245" |
|
comment |
query | нет | string |
form | true | Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. |
"Priority" |
|
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:date |
form | true | Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
inventory_updated_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для inventory_updated_at. Этот фильтр также можно передать как filter[inventory_updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
inventory_updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для inventory_updated_at. Этот фильтр также можно передать как filter[inventory_updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
price_from |
query | нет | number:float |
form | true | Нижняя включительная числовая граница для price. Этот фильтр также можно передать как filter[price_from], если это поддерживает Laravel query adapter. |
19.99 |
|
price_to |
query | нет | number:float |
form | true | Верхняя включительная числовая граница для price. Этот фильтр также можно передать как filter[price_to], если это поддерживает Laravel query adapter. |
19.99 |
|
estimated_price_from |
query | нет | number:float |
form | true | Нижняя включительная числовая граница для estimated_price. Этот фильтр также можно передать как filter[estimated_price_from], если это поддерживает Laravel query adapter. |
19.99 |
|
estimated_price_to |
query | нет | number:float |
form | true | Верхняя включительная числовая граница для estimated_price. Этот фильтр также можно передать как filter[estimated_price_to], если это поддерживает Laravel query adapter. |
19.99 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<Product> |
|
|||
data[] |
нет | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].type_id |
нет | integer:int64 | null |
1 |
|||
data[].name |
да | string |
"Coffee 250g" |
|||
data[].article |
нет | string | null |
"ART-001245" |
|||
data[].sku |
нет | string | null |
"SKU-001245" |
|||
data[].price |
нет | number:float | null |
19.99 |
|||
data[].estimated_price |
нет | number:float | null |
21.5 |
|||
data[].image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
нет | Dimensions |
|
|||
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[].weight |
нет | Weight |
|
|||
data[].weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
да | enum |
enum: g | "g" |
||
data[].datamatrix_required |
да | boolean |
false |
|||
data[].expiration_required |
да | boolean |
true |
|||
data[].comment |
нет | string | null |
"Keep dry" |
|||
data[].description |
нет | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
нет | array<ProductBarcode> |
|
|||
data[].barcodes[] |
нет | ProductBarcode |
|
|||
data[].barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
да | boolean |
true |
|||
data[].stocks |
нет | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data[].stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data[].package |
нет | object | null |
|
|||
data[].package.kind |
нет | string | null |
"unit" |
|||
data[].package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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": 1201,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": false,
"expiration_required": true,
"comment": "Keep dry",
"description": "Ground coffee package",
"inventory_updated_at": "2026-07-14T08:30:00Z",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"stocks": {
"available_by_warehouse": {
"42": 18
},
"physical": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 24,
"stockReserved": 6,
"stockAvailable": 18
}
],
"aggregate": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 30,
"stockReserved": 7,
"stockAvailable": 23
}
]
},
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/products?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/products?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/products?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/products",
"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"
}
Создать товар
| operationId | createProducts |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Creates one product or imports multiple products. Barcodes, dimensions, weights, marking requirements, expiration requirements, and package metadata are accepted in public v2 field names.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/products" \
--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" |
Тело запроса
BulkCreateProductsRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateProductPayload |
|
|||
data |
да | array<CreateProductPayload> |
minItems: 1 | |
Примеры запроса
default
{
"data": [
{
"external_id": "EXT-10045",
"shop_id": 12,
"name": "Coffee 250g",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"type_id": 3
}
]
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ProductMutationResponse |
Запись одного товара возвращает ProductResponse; запись массива товаров возвращает ProductCollectionResponse в порядке входных успешно обработанных элементов. |
|
||
data |
да | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.type_id |
нет | integer:int64 | null |
1 |
|||
data.name |
да | string |
"Coffee 250g" |
|||
data.article |
нет | string | null |
"ART-001245" |
|||
data.sku |
нет | string | null |
"SKU-001245" |
|||
data.price |
нет | number:float | null |
19.99 |
|||
data.estimated_price |
нет | number:float | null |
21.5 |
|||
data.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
нет | Dimensions |
|
|||
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.weight |
нет | Weight |
|
|||
data.weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
да | enum |
enum: g | "g" |
||
data.datamatrix_required |
да | boolean |
false |
|||
data.expiration_required |
да | boolean |
true |
|||
data.comment |
нет | string | null |
"Keep dry" |
|||
data.description |
нет | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
нет | array<ProductBarcode> |
|
|||
data.barcodes[] |
нет | ProductBarcode |
|
|||
data.barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
да | boolean |
true |
|||
data.stocks |
нет | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data.stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data.package |
нет | object | null |
|
|||
data.package.kind |
нет | string | null |
"unit" |
|||
data.package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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" |
|||
data |
да | array<Product> |
|
|||
data[] |
нет | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].type_id |
нет | integer:int64 | null |
1 |
|||
data[].name |
да | string |
"Coffee 250g" |
|||
data[].article |
нет | string | null |
"ART-001245" |
|||
data[].sku |
нет | string | null |
"SKU-001245" |
|||
data[].price |
нет | number:float | null |
19.99 |
|||
data[].estimated_price |
нет | number:float | null |
21.5 |
|||
data[].image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
нет | Dimensions |
|
|||
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[].weight |
нет | Weight |
|
|||
data[].weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
да | enum |
enum: g | "g" |
||
data[].datamatrix_required |
да | boolean |
false |
|||
data[].expiration_required |
да | boolean |
true |
|||
data[].comment |
нет | string | null |
"Keep dry" |
|||
data[].description |
нет | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
нет | array<ProductBarcode> |
|
|||
data[].barcodes[] |
нет | ProductBarcode |
|
|||
data[].barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
да | boolean |
true |
|||
data[].stocks |
нет | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data[].stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data[].package |
нет | object | null |
|
|||
data[].package.kind |
нет | string | null |
"unit" |
|||
data[].package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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": 1201,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": false,
"expiration_required": true,
"comment": "Keep dry",
"description": "Ground coffee package",
"inventory_updated_at": "2026-07-14T08:30:00Z",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"stocks": {
"available_by_warehouse": {
"42": 18
},
"physical": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 24,
"stockReserved": 6,
"stockAvailable": 18
}
],
"aggregate": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 30,
"stockReserved": 7,
"stockAvailable": 23
}
]
},
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null
},
"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"
}
Обновить товар
| operationId | replaceProducts |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Bulk updates products identified by id or by external_id plus shop_id. When barcodes are supplied, the barcode set is replaced according to existing product rules.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/products" \
--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" |
Тело запроса
BulkReplaceProductsRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ReplaceProductPayload |
|
|||
data |
да | array<ReplaceProductPayload> |
minItems: 1 | |
Примеры запроса
default
{
"data": [
{
"id": 1201,
"name": "Coffee 250g",
"price": 19.99,
"type_id": 3
}
]
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ProductMutationResponse |
Запись одного товара возвращает ProductResponse; запись массива товаров возвращает ProductCollectionResponse в порядке входных успешно обработанных элементов. |
|
||
data |
да | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.type_id |
нет | integer:int64 | null |
1 |
|||
data.name |
да | string |
"Coffee 250g" |
|||
data.article |
нет | string | null |
"ART-001245" |
|||
data.sku |
нет | string | null |
"SKU-001245" |
|||
data.price |
нет | number:float | null |
19.99 |
|||
data.estimated_price |
нет | number:float | null |
21.5 |
|||
data.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
нет | Dimensions |
|
|||
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.weight |
нет | Weight |
|
|||
data.weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
да | enum |
enum: g | "g" |
||
data.datamatrix_required |
да | boolean |
false |
|||
data.expiration_required |
да | boolean |
true |
|||
data.comment |
нет | string | null |
"Keep dry" |
|||
data.description |
нет | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
нет | array<ProductBarcode> |
|
|||
data.barcodes[] |
нет | ProductBarcode |
|
|||
data.barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
да | boolean |
true |
|||
data.stocks |
нет | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data.stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data.package |
нет | object | null |
|
|||
data.package.kind |
нет | string | null |
"unit" |
|||
data.package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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" |
|||
data |
да | array<Product> |
|
|||
data[] |
нет | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].type_id |
нет | integer:int64 | null |
1 |
|||
data[].name |
да | string |
"Coffee 250g" |
|||
data[].article |
нет | string | null |
"ART-001245" |
|||
data[].sku |
нет | string | null |
"SKU-001245" |
|||
data[].price |
нет | number:float | null |
19.99 |
|||
data[].estimated_price |
нет | number:float | null |
21.5 |
|||
data[].image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
нет | Dimensions |
|
|||
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[].weight |
нет | Weight |
|
|||
data[].weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
да | enum |
enum: g | "g" |
||
data[].datamatrix_required |
да | boolean |
false |
|||
data[].expiration_required |
да | boolean |
true |
|||
data[].comment |
нет | string | null |
"Keep dry" |
|||
data[].description |
нет | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
нет | array<ProductBarcode> |
|
|||
data[].barcodes[] |
нет | ProductBarcode |
|
|||
data[].barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
да | boolean |
true |
|||
data[].stocks |
нет | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data[].stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data[].package |
нет | object | null |
|
|||
data[].package.kind |
нет | string | null |
"unit" |
|||
data[].package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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": 1201,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": false,
"expiration_required": true,
"comment": "Keep dry",
"description": "Ground coffee package",
"inventory_updated_at": "2026-07-14T08:30:00Z",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"stocks": {
"available_by_warehouse": {
"42": 18
},
"physical": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 24,
"stockReserved": 6,
"stockAvailable": 18
}
],
"aggregate": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 30,
"stockReserved": 7,
"stockAvailable": 23
}
]
},
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null
},
"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"
}
Обновить товар
| operationId | patchProducts |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Partially bulk updates products. Only supplied product fields are changed.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
For unplaced consumable usage, stockTotal does not include a permanent physical write-off and must not be used as available packaging inventory. Addressed consumable write-offs remain the existing warehouse process.
Optional type_id accepts integer codes 1 ordinary, 2 composite, 3 component, 4 consumable, 5 packaging. Omission preserves the existing/default type; explicit null, empty, fractional or unknown values are rejected. Types 2/3 require composites enabled in the shop and permission to manage composition, in addition to product create/update rights. Quant packaging and links, existing composition links and dependent warehouse documents can prevent a type transition. This field does not create or replace a composition. Product and component prices are independent. Each item commits separately: a later rule failure may leave earlier items applied. Read back affected products before retrying a failed bulk request.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/products" \
--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" |
Тело запроса
BulkPatchProductsRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | PatchProductPayload |
|
|||
data |
да | array<PatchProductPayload> |
minItems: 1 | |
Примеры запроса
default
{
"data": [
{
"external_id": "EXT-10045",
"shop_id": 12,
"price": 18.99,
"type_id": 3
}
]
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
(root) |
нет | ProductMutationResponse |
Запись одного товара возвращает ProductResponse; запись массива товаров возвращает ProductCollectionResponse в порядке входных успешно обработанных элементов. |
|
||
data |
да | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.type_id |
нет | integer:int64 | null |
1 |
|||
data.name |
да | string |
"Coffee 250g" |
|||
data.article |
нет | string | null |
"ART-001245" |
|||
data.sku |
нет | string | null |
"SKU-001245" |
|||
data.price |
нет | number:float | null |
19.99 |
|||
data.estimated_price |
нет | number:float | null |
21.5 |
|||
data.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
нет | Dimensions |
|
|||
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.weight |
нет | Weight |
|
|||
data.weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
да | enum |
enum: g | "g" |
||
data.datamatrix_required |
да | boolean |
false |
|||
data.expiration_required |
да | boolean |
true |
|||
data.comment |
нет | string | null |
"Keep dry" |
|||
data.description |
нет | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
нет | array<ProductBarcode> |
|
|||
data.barcodes[] |
нет | ProductBarcode |
|
|||
data.barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
да | boolean |
true |
|||
data.stocks |
нет | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data.stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data.package |
нет | object | null |
|
|||
data.package.kind |
нет | string | null |
"unit" |
|||
data.package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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" |
|||
data |
да | array<Product> |
|
|||
data[] |
нет | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data[].shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].type_id |
нет | integer:int64 | null |
1 |
|||
data[].name |
да | string |
"Coffee 250g" |
|||
data[].article |
нет | string | null |
"ART-001245" |
|||
data[].sku |
нет | string | null |
"SKU-001245" |
|||
data[].price |
нет | number:float | null |
19.99 |
|||
data[].estimated_price |
нет | number:float | null |
21.5 |
|||
data[].image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
нет | Dimensions |
|
|||
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[].weight |
нет | Weight |
|
|||
data[].weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
да | enum |
enum: g | "g" |
||
data[].datamatrix_required |
да | boolean |
false |
|||
data[].expiration_required |
да | boolean |
true |
|||
data[].comment |
нет | string | null |
"Keep dry" |
|||
data[].description |
нет | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
нет | array<ProductBarcode> |
|
|||
data[].barcodes[] |
нет | ProductBarcode |
|
|||
data[].barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
да | boolean |
true |
|||
data[].stocks |
нет | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data[].stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data[].package |
нет | object | null |
|
|||
data[].package.kind |
нет | string | null |
"unit" |
|||
data[].package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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": 1201,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": false,
"expiration_required": true,
"comment": "Keep dry",
"description": "Ground coffee package",
"inventory_updated_at": "2026-07-14T08:30:00Z",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"stocks": {
"available_by_warehouse": {
"42": 18
},
"physical": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 24,
"stockReserved": 6,
"stockAvailable": 18
}
],
"aggregate": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 30,
"stockReserved": 7,
"stockAvailable": 23
}
]
},
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null
},
"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"
}
Получить товар
| operationId | getProducts |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Возвращает один ресурс: товар, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID товара. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Product |
Product catalog item exposed by API v2. Product barcodes identify a product or package type and are not unique SSCC values. Use /api/v2/closed-boxes to read individual sealed boxes and their current box balance. |
|
||
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 |
"EXT-10045" |
|||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.type_id |
нет | integer:int64 | null |
1 |
|||
data.name |
да | string |
"Coffee 250g" |
|||
data.article |
нет | string | null |
"ART-001245" |
|||
data.sku |
нет | string | null |
"SKU-001245" |
|||
data.price |
нет | number:float | null |
19.99 |
|||
data.estimated_price |
нет | number:float | null |
21.5 |
|||
data.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
нет | Dimensions |
|
|||
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.weight |
нет | Weight |
|
|||
data.weight.value |
нет | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
да | enum |
enum: g | "g" |
||
data.datamatrix_required |
да | boolean |
false |
|||
data.expiration_required |
да | boolean |
true |
|||
data.comment |
нет | string | null |
"Keep dry" |
|||
data.description |
нет | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
нет | array<ProductBarcode> |
|
|||
data.barcodes[] |
нет | ProductBarcode |
|
|||
data.barcodes[].barcode |
да | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
да | boolean |
true |
|||
data.stocks |
нет | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
нет | object |
Объект с ключами по ID склада. Значения являются количествами. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
нет | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
да | number:float |
18.0 |
|||
data.stocks.aggregate |
нет | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
нет | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
да | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
да | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
да | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
да | number:float |
18.0 |
|||
data.package |
нет | object | null |
|
|||
data.package.kind |
нет | string | null |
"unit" |
|||
data.package.parent_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
нет | number:float | null |
min: 0 | 6 |
||
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": 1201,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": "https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg",
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": false,
"expiration_required": true,
"comment": "Keep dry",
"description": "Ground coffee package",
"inventory_updated_at": "2026-07-14T08:30:00Z",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"stocks": {
"available_by_warehouse": {
"42": 18
},
"physical": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 24,
"stockReserved": 6,
"stockAvailable": 18
}
],
"aggregate": [
{
"warehouse_id": 42,
"warehouse_name": "Warehouse Sofia",
"stockTotal": 30,
"stockReserved": 7,
"stockAvailable": 23
}
]
},
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Удалить товар
| operationId | deleteProducts |
|---|---|
| Раздел | Товары |
| Безопасность | 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/products/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"
}
List physical stock lots
| operationId | getProductStockLots |
|---|---|
| Раздел | Товары |
| Безопасность | bearerAuth |
Read physical placed stock per warehouse, place and lot in this product's units. Unplaced reservations are excluded because they have no actual lot yet. Aggregate physical_quantity by warehouse and lot for reconciliation. Results use current product visibility and container rules, standard pagination (maximum 500) and no snapshot isolation.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001/stock-lots" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID товара. | 1001 |
||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, warehouse_id, expiration_date. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
batch |
query | нет | string |
form | true | Фильтр по batch с частичным текстовым совпадением. Этот фильтр также можно передать как filter[batch], если это поддерживает Laravel query adapter. |
"LOT-2026" |
|
production_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<StockLot> |
|
|||
data[] |
нет | StockLot |
One active positive placed stock slice in product units, using the same container visibility rules as product stock. Does not allocate unplaced reservations to lots. Not a snapshot cursor or append-only feed. | |
||
data[].batch |
да | string | null |
"LOT-2026" |
|||
data[].production_date |
да | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
да | string:date | null |
"2027-01-15" |
|||
data[].id |
да | integer:int64 |
min: 1 | 5001 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].warehouse_id |
да | integer:int64 |
min: 1 | 734 |
||
data[].place_id |
да | integer:int64 |
min: 1 | 501 |
||
data[].physical_quantity |
да | number:float |
min: 0 | 12 |
||
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": [
{
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"id": 5001,
"product_id": 1201,
"warehouse_id": 734,
"place_id": 501,
"physical_quantity": 12
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/products/5101/stock-lots",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Разукомплектация квантов
Получить список разукомплектаций квантов
| operationId | listQuantUnpackings |
|---|---|
| Раздел | Разукомплектация квантов |
| Безопасность | bearerAuth |
Возвращает разукомплектации квантов, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
--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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, document_date, conducted_at, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
after_id |
query | нет | integer:int64 |
form | true | min: 0 | Вернуть строки с ID больше указанного значения. Граница исключающая. Этот фильтр также можно передать как filter[after_id], если это поддерживает Laravel query adapter. |
1000 |
include |
query | нет | string |
form | false | Связанные сущности через запятую. Допустимые значения: items. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. |
"items" |
|
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 |
user_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по user_id с точным совпадением. Этот фильтр также можно передать как filter[user_id], если это поддерживает Laravel query adapter. |
15 |
comment |
query | нет | string |
form | true | Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. |
"Priority" |
|
document_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
document_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
conducted_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для conducted_at. Этот фильтр также можно передать как filter[conducted_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
conducted_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для conducted_at. Этот фильтр также можно передать как filter[conducted_at_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" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<QuantUnpacking> |
|
|||
data[] |
нет | QuantUnpacking |
Документ разукомплектации кванта. | |
||
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 |
"QU-100245" |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data[].status_id |
нет | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data[].document_date |
нет | string:date | null |
"2026-07-14" |
|||
data[].counts |
да | object |
|
|||
data[].counts.source |
да | number:float |
1 |
|||
data[].counts.target |
да | number:float |
6 |
|||
data[].counts.source_moved |
да | number:float |
0 |
|||
data[].counts.target_moved |
да | number:float |
0 |
|||
data[].conducted_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].comment |
нет | string | null |
"Unpack coffee box" |
|||
data[].items |
нет | array<QuantUnpackingItem> |
|
|||
data[].items[] |
нет | QuantUnpackingItem |
Строка разукомплектации кванта. | |
||
data[].items[].id |
да | integer:int64 |
readOnly | min: 1 | 9001 |
|
data[].items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data[].items[].target_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data[].items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data[].items[].source_quantity |
да | number:float |
min: 0 | 1 |
||
data[].items[].target_quantity |
нет | number:float | null |
min: 0 | 6 |
||
data[].items[].available_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data[].items[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].items[].comment |
нет | string | null |
"Box unpacked" |
|||
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": 9201,
"external_id": "QU-100245",
"domain_id": 3,
"warehouse_id": 42,
"user_id": 9,
"status_id": 1,
"document_date": "2026-07-14",
"counts": {
"source": 1,
"target": 6,
"source_moved": 0,
"target_moved": 0
},
"conducted_at": null,
"comment": "Unpack coffee box",
"items": [
{
"id": 9001,
"source_product_id": 1200,
"target_product_id": 1201,
"source_place_id": 501,
"target_place_id": 502,
"source_quantity": 1,
"target_quantity": 6,
"available_quantity": 10,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"comment": "Box unpacked"
}
],
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/quant-unpackings?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/quant-unpackings",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Создать разукомплектацию кванта
| operationId | createQuantUnpackings |
|---|---|
| Раздел | Разукомплектация квантов |
| Безопасность | bearerAuth |
Create quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
--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" |
Тело запроса
CreateQuantUnpackingRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateQuantUnpackingPayload |
|
|||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.document_date |
нет | string:date | null |
"2026-07-14" |
|||
data.external_id |
нет | string | null |
"QU-100245" |
|||
data.comment |
нет | string | null |
"Unpack coffee box" |
|||
data.conduct |
нет | boolean |
false |
|||
data.items |
да | array<QuantUnpackingItemCreatePayload> |
minItems: 1 | |
||
data.items[] |
нет | QuantUnpackingItemCreatePayload |
Исходная строка разукомплектации кванта. Целевой товар и целевое количество определяются сервисом упаковок. | |
||
data.items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.items[].source_quantity |
да | number:float |
min: 0.001 | 1 |
||
data.items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.items[].batch |
нет | string | null |
"LOT-2026" |
|||
data.items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
нет | string | null |
"Box unpacked" |
Примеры запроса
default
{
"data": {
"warehouse_id": 42,
"external_id": "QU-100245",
"items": [
{
"source_product_id": 1200,
"source_quantity": 1,
"source_place_id": 501
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | QuantUnpacking |
Документ разукомплектации кванта. | |
||
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 |
"QU-100245" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
нет | string:date | null |
"2026-07-14" |
|||
data.counts |
да | object |
|
|||
data.counts.source |
да | number:float |
1 |
|||
data.counts.target |
да | number:float |
6 |
|||
data.counts.source_moved |
да | number:float |
0 |
|||
data.counts.target_moved |
да | number:float |
0 |
|||
data.conducted_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
нет | string | null |
"Unpack coffee box" |
|||
data.items |
нет | array<QuantUnpackingItem> |
|
|||
data.items[] |
нет | QuantUnpackingItem |
Строка разукомплектации кванта. | |
||
data.items[].id |
да | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
да | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
нет | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
нет | string | null |
"LOT-2026" |
|||
data.items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
нет | string | null |
"Box unpacked" |
|||
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": 9201,
"external_id": "QU-100245",
"domain_id": 3,
"warehouse_id": 42,
"user_id": 9,
"status_id": 1,
"document_date": "2026-07-14",
"counts": {
"source": 1,
"target": 6,
"source_moved": 0,
"target_moved": 0
},
"conducted_at": null,
"comment": "Unpack coffee box",
"items": [
{
"id": 9001,
"source_product_id": 1200,
"target_product_id": 1201,
"source_place_id": 501,
"target_place_id": 502,
"source_quantity": 1,
"target_quantity": 6,
"available_quantity": 10,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"comment": "Box unpacked"
}
],
"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"
}
Получить разукомплектацию кванта
| operationId | getQuantUnpackings |
|---|---|
| Раздел | Разукомплектация квантов |
| Безопасность | bearerAuth |
Возвращает один ресурс: разукомплектация кванта, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID документа разукомплектации кванта. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | QuantUnpacking |
Документ разукомплектации кванта. | |
||
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 |
"QU-100245" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
нет | string:date | null |
"2026-07-14" |
|||
data.counts |
да | object |
|
|||
data.counts.source |
да | number:float |
1 |
|||
data.counts.target |
да | number:float |
6 |
|||
data.counts.source_moved |
да | number:float |
0 |
|||
data.counts.target_moved |
да | number:float |
0 |
|||
data.conducted_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
нет | string | null |
"Unpack coffee box" |
|||
data.items |
нет | array<QuantUnpackingItem> |
|
|||
data.items[] |
нет | QuantUnpackingItem |
Строка разукомплектации кванта. | |
||
data.items[].id |
да | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
да | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
нет | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
нет | string | null |
"LOT-2026" |
|||
data.items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
нет | string | null |
"Box unpacked" |
|||
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": 9201,
"external_id": "QU-100245",
"domain_id": 3,
"warehouse_id": 42,
"user_id": 9,
"status_id": 1,
"document_date": "2026-07-14",
"counts": {
"source": 1,
"target": 6,
"source_moved": 0,
"target_moved": 0
},
"conducted_at": null,
"comment": "Unpack coffee box",
"items": [
{
"id": 9001,
"source_product_id": 1200,
"target_product_id": 1201,
"source_place_id": 501,
"target_place_id": 502,
"source_quantity": 1,
"target_quantity": 6,
"available_quantity": 10,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"comment": "Box unpacked"
}
],
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Провести разукомплектацию кванта
| operationId | conductQuantUnpacking |
|---|---|
| Раздел | Разукомплектация квантов |
| Безопасность | bearerAuth |
Conduct quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001/conduct" \
--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 |
да | QuantUnpacking |
Документ разукомплектации кванта. | |
||
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 |
"QU-100245" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
нет | string:date | null |
"2026-07-14" |
|||
data.counts |
да | object |
|
|||
data.counts.source |
да | number:float |
1 |
|||
data.counts.target |
да | number:float |
6 |
|||
data.counts.source_moved |
да | number:float |
0 |
|||
data.counts.target_moved |
да | number:float |
0 |
|||
data.conducted_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
нет | string | null |
"Unpack coffee box" |
|||
data.items |
нет | array<QuantUnpackingItem> |
|
|||
data.items[] |
нет | QuantUnpackingItem |
Строка разукомплектации кванта. | |
||
data.items[].id |
да | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
да | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
нет | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
нет | string | null |
"LOT-2026" |
|||
data.items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
нет | string | null |
"Box unpacked" |
|||
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": 9201,
"external_id": "QU-100245",
"domain_id": 3,
"warehouse_id": 42,
"user_id": 9,
"status_id": 1,
"document_date": "2026-07-14",
"counts": {
"source": 1,
"target": 6,
"source_moved": 0,
"target_moved": 0
},
"conducted_at": null,
"comment": "Unpack coffee box",
"items": [
{
"id": 9001,
"source_product_id": 1200,
"target_product_id": 1201,
"source_place_id": 501,
"target_place_id": 502,
"source_quantity": 1,
"target_quantity": 6,
"available_quantity": 10,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"comment": "Box unpacked"
}
],
"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"
}
Добавить строку разукомплектации
| operationId | addQuantUnpackingsItems |
|---|---|
| Раздел | Разукомплектация квантов |
| Безопасность | bearerAuth |
Add quant unpacking. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001/items" \
--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" |
Тело запроса
AddQuantUnpackingItemRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | QuantUnpackingItemCreatePayload |
Исходная строка разукомплектации кванта. Целевой товар и целевое количество определяются сервисом упаковок. | |
||
data.source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.source_quantity |
да | number:float |
min: 0.001 | 1 |
||
data.source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.batch |
нет | string | null |
"LOT-2026" |
|||
data.production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.comment |
нет | string | null |
"Box unpacked" |
Примеры запроса
default
{
"data": {
"source_product_id": 1200,
"source_quantity": 1,
"source_place_id": 501
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | QuantUnpacking |
Документ разукомплектации кванта. | |
||
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 |
"QU-100245" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
нет | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
нет | string:date | null |
"2026-07-14" |
|||
data.counts |
да | object |
|
|||
data.counts.source |
да | number:float |
1 |
|||
data.counts.target |
да | number:float |
6 |
|||
data.counts.source_moved |
да | number:float |
0 |
|||
data.counts.target_moved |
да | number:float |
0 |
|||
data.conducted_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
нет | string | null |
"Unpack coffee box" |
|||
data.items |
нет | array<QuantUnpackingItem> |
|
|||
data.items[] |
нет | QuantUnpackingItem |
Строка разукомплектации кванта. | |
||
data.items[].id |
да | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
да | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
нет | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
да | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
нет | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
нет | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
нет | string | null |
"LOT-2026" |
|||
data.items[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
нет | string | null |
"Box unpacked" |
|||
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": 9201,
"external_id": "QU-100245",
"domain_id": 3,
"warehouse_id": 42,
"user_id": 9,
"status_id": 1,
"document_date": "2026-07-14",
"counts": {
"source": 1,
"target": 6,
"source_moved": 0,
"target_moved": 0
},
"conducted_at": null,
"comment": "Unpack coffee box",
"items": [
{
"id": 9001,
"source_product_id": 1200,
"target_product_id": 1201,
"source_place_id": 501,
"target_place_id": 502,
"source_quantity": 1,
"target_quantity": 6,
"available_quantity": 10,
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"comment": "Box unpacked"
}
],
"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"
}
Документы отправок
Получить список документов отправок
| operationId | listSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Возвращает send documents, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents" \
--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: 100 |
Количество записей на странице. По умолчанию 20; максимум 100. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
20 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, document_date, status_id, warehouse_id, order_count, processing_mode, pipeline_state, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
include |
query | нет | string |
form | false | Comma-separated optional relations. Allowed values: status, warehouse, delivery_services, orders, orders.products, orders.datamatrix, orders.wildberries, wildberries_supplies, batch. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"status,warehouse,delivery_services,orders,orders.products,orders.datamatrix,orders.wildberries,wildberries_supplies,batch" |
|
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
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 |
delivery_service_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по delivery_service_id с точным совпадением. Этот фильтр также можно передать как filter[delivery_service_id], если это поддерживает Laravel query adapter. |
1 |
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
processing_mode |
query | нет | string |
form | true | Фильтр по processing_mode с точным совпадением. Этот фильтр также можно передать как filter[processing_mode], если это поддерживает Laravel query adapter. |
"standard" |
|
pipeline_state |
query | нет | string |
form | true | Фильтр по pipeline_state с точным совпадением. Этот фильтр также можно передать как filter[pipeline_state], если это поддерживает Laravel query adapter. |
"open" |
|
wb_fulfillment_state |
query | нет | string |
form | true | Фильтр по wb_fulfillment_state с точным совпадением. Этот фильтр также можно передать как filter[wb_fulfillment_state], если это поддерживает Laravel query adapter. |
"delivered" |
|
comment |
query | нет | string |
form | true | Фильтр по comment с частичным текстовым совпадением. Этот фильтр также можно передать как filter[comment], если это поддерживает Laravel query adapter. |
"Priority" |
|
document_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
document_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для document_date. Этот фильтр также можно передать как filter[document_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:date |
form | true | Нижняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для updated_at. Этот фильтр также можно передать как filter[updated_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<SendDocument> |
|
|||
data[] |
нет | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].status |
нет | object | null |
|
|||
data[].status.id |
да | integer:int64 |
1 |
|||
data[].status.name |
да | string |
"Открыт" |
|||
data[].status.color |
нет | string | null |
"#2457c5" |
|||
data[].status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].warehouse |
нет | object | null |
|
|||
data[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data[].warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data[].warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data[].delivery_service_ids |
да | array<integer:int64> |
|
|||
data[].delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data[].delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data[].delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data[].delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data[].delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data[].delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data[].delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data[].delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data[].delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data[].delivery_services[].is_courier |
да | boolean |
false |
|||
data[].document_date |
нет | string:date | null |
"2026-08-11" |
|||
data[].closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data[].order_count |
да | integer:int64 |
min: 0 | 1 |
||
data[].processing |
да | SendDocumentProcessing |
|
|||
data[].processing.mode |
нет | string | null |
"standard" |
|||
data[].processing.pipeline |
да | array<string> |
|
|||
data[].processing.pipeline[] |
нет | string |
"assignment" |
|||
data[].processing.state |
нет | string | null |
"open" |
|||
data[].processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data[].processing.batch_profile |
нет | object | null |
|
|||
data[].processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data[].processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data[].processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data[].processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data[].wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data[].wildberries.error_message |
нет | string | null |
"" |
|||
data[].wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].wildberries.supplies |
да | array<object> |
|
|||
data[].wildberries.supplies[] |
нет | object |
|
|||
data[].orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data[].orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data[].orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data[].orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data[].orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data[].orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data[].orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data[].orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data[].orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data[].orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data[].orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data[].orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data[].orders[].order.amounts |
нет | object | null |
|
|||
data[].orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data[].orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data[].orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data[].orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data[].orders[].order.contact |
нет | object | null |
|
|||
data[].orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data[].orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data[].orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data[].orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data[].orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data[].orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data[].orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data[].orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data[].orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data[].orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data[].orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data[].orders[].order.delivery |
нет | object | null |
|
|||
data[].orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data[].orders[].order.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[].orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data[].orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data[].orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data[].orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data[].orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data[].orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data[].orders[].order.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[].orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data[].orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data[].orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data[].orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data[].orders[].order.comments |
нет | object | null |
|
|||
data[].orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data[].orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data[].orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data[].orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data[].orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data[].orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data[].orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data[].orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data[].orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data[].orders[].order.offers[].product |
нет | object | null |
|
|||
data[].orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data[].orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data[].orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data[].orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data[].orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data[].orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data[].orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data[].orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data[].orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data[].orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data[].orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data[].orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].orders[].order.warehouse |
нет | object | null |
|
|||
data[].orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data[].orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data[].orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data[].orders[].order.shop |
нет | object | null |
|
|||
data[].orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data[].orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data[].orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data[].orders[].order.company |
нет | object | null |
|
|||
data[].orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data[].orders[].order.company.name |
да | string |
"Demo Company" |
|||
data[].orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data[].orders[].order.place |
нет | object | null |
|
|||
data[].orders[].order.accumulation_place |
нет | object | null |
|
|||
data[].orders[].order.measurements |
нет | object | null |
|
|||
data[].orders[].order.settings |
нет | object | null |
|
|||
data[].orders[].order.consumables |
да | array<object> |
|
|||
data[].orders[].order.consumables[] |
нет | object |
|
|||
data[].orders[].order.wildberries |
нет | object | null |
|
|||
data[].orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].orders[].order.batch_matches |
да | array<object> |
|
|||
data[].orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/send-documents?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/send-documents?page=3",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/send-documents?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 3,
"path": "https://betawms.ffcdek.ru/api/v2/send-documents",
"per_page": 20,
"to": 20,
"total": 43
}
}
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"
}
Создать документ отправки
| operationId | createSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Create send document. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/send-documents" \
--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" |
Тело запроса
CreateSendDocumentRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateSendDocumentPayload |
Creates an open shipment document. Warehouse and delivery services must be active and visible in tenant scope. | |
||
data.document_date |
да | string:date |
"2026-08-11" |
|||
data.warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.delivery_service_ids |
да | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.comment |
нет | string | null |
maxLength: 1000 | "Wildberries shipment 740" |
Примеры запроса
default
{
"data": {
"document_date": "2026-08-11",
"warehouse_id": 42,
"delivery_service_ids": [
17
],
"comment": "Wildberries shipment 740"
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15: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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Получить документ отправки
| operationId | getSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Возвращает один ресурс: send document, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Shipment document ID. | 740 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15:00Z"
},
"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"
}
Обновить документ отправки
| operationId | replaceSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Update send document. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/send-documents/740" \
--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 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
ReplaceSendDocumentRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ReplaceSendDocumentPayload |
Shipment document update. Omitted fields remain unchanged; status transitions follow the administrative lifecycle rules. | |
||
data.status_id |
нет | integer:int64 | null |
2 |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.delivery_service_ids |
нет | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.comment |
нет | string | null |
maxLength: 1000 | "Передано перевозчику" |
Примеры запроса
default
{
"data": {
"status_id": 2,
"comment": "Передано перевозчику"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15: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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Обновить документ отправки
| operationId | patchSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Update send document. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/send-documents/740" \
--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 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
PatchSendDocumentRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | PatchSendDocumentPayload |
Partial shipment document update. Omitted fields remain unchanged. | |
||
data.status_id |
нет | integer:int64 | null |
2 |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.delivery_service_ids |
нет | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.comment |
нет | string | null |
maxLength: 1000 | "Передано перевозчику" |
Примеры запроса
default
{
"data": {
"comment": "Передано перевозчику"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15: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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Удалить документ отправки
| operationId | deleteSendDocuments |
|---|---|
| Раздел | Документы отправок |
| Безопасность | 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/send-documents/740" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
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": 740
}
}
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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Получить журнал событий документа отправки
| operationId | listSendDocumentsEvents |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Возвращает send documents, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740/events" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, happened_at, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
category |
query | нет | string |
form | true | Фильтр по category с точным совпадением. Этот фильтр также можно передать как filter[category], если это поддерживает Laravel query adapter. |
"document" |
|
state |
query | нет | string |
form | true | Фильтр по state с точным совпадением. Этот фильтр также можно передать как filter[state], если это поддерживает Laravel query adapter. |
"ready" |
|
direction |
query | нет | string |
form | true | Фильтр по direction с точным совпадением. Этот фильтр также можно передать как filter[direction], если это поддерживает Laravel query adapter. |
"outbound" |
|
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
event |
query | нет | string |
form | true | Фильтр по event с частичным текстовым совпадением. Этот фильтр также можно передать как filter[event], если это поддерживает Laravel query adapter. |
"order_attached" |
|
error_message |
query | нет | string |
form | true | Фильтр по error_message с частичным текстовым совпадением. Этот фильтр также можно передать как filter[error_message], если это поддерживает Laravel query adapter. |
"Remote service rejected the shipment" |
|
happened_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для happened_at. Этот фильтр также можно передать как filter[happened_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
happened_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для happened_at. Этот фильтр также можно передать как filter[happened_at_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" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<SendDocumentAuditEvent> |
|
|||
data[] |
нет | SendDocumentAuditEvent |
Append-only audit event for a shipment document. | |
||
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[].category |
нет | string | null |
"document" |
|||
data[].event |
да | string |
"order_attached" |
|||
data[].state |
нет | string | null |
"open" |
|||
data[].direction |
нет | string | null |
"outbound" |
|||
data[].happened_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data[].actor_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data[].actor_type |
нет | string | null |
"user" |
|||
data[].request_id |
нет | string | null |
"req-740-attach" |
|||
data[].order_id |
нет | integer:int64 | null |
min: 1 | 49060 |
||
data[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].entity_type |
нет | string | null |
"shipment" |
|||
data[].entity_id |
нет | integer:int64 | null |
min: 1 | 740 |
||
data[].context |
да | object |
|
|||
data[].error_code |
нет | string | null |
"" |
|||
data[].error_message |
нет | string | null |
"" |
|||
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": 9901,
"category": "document",
"event": "order_attached",
"state": "open",
"direction": "outbound",
"happened_at": "2026-08-11T09:00:00Z",
"actor_id": 15,
"actor_type": "user",
"request_id": "req-740-attach",
"order_id": 49060,
"product_id": null,
"entity_type": "shipment",
"entity_id": 740,
"context": {
"document_id": 740,
"order_id": 49060
},
"error_code": null,
"error_message": null,
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:00:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/send-documents/740/events",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Добавить заказы в документ отправки
| operationId | createSendDocumentsOrders |
|---|---|
| Раздел | Документы отправок |
| Безопасность | bearerAuth |
Attach orders to send document. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/send-documents/740/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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
AttachSendDocumentOrdersRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | AttachSendDocumentOrdersPayload |
Orders to attach. Every order must be visible to the caller and compatible with the document warehouse, delivery services and lifecycle state. | |
||
data.order_ids |
да | array<integer:int64> |
minItems: 1 maxItems: 100 |
|
||
data.order_ids[] |
нет | integer:int64 |
min: 1 | 49060 |
Примеры запроса
default
{
"data": {
"order_ids": [
49060
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15: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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Удалить заказ из документа отправки
| operationId | deleteSendDocumentsOrders |
|---|---|
| Раздел | Документы отправок |
| Безопасность | 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/send-documents/740/orders/49060" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
orderId |
path | да | integer:int64 |
min: 1 | Order ID assigned to the shipment document. | 49060 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | SendDocument |
Outbound shipment document with its complete operational composition. Collection relations are empty unless requested through include; the item endpoint always loads them. |
|
||
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.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.status |
нет | object | null |
|
|||
data.status.id |
да | integer:int64 |
1 |
|||
data.status.name |
да | string |
"Открыт" |
|||
data.status.color |
нет | string | null |
"#2457c5" |
|||
data.status.background_color |
нет | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
да | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
нет | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
да | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
нет | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
да | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
да | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
да | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
нет | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
нет | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
нет | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
да | boolean |
false |
|||
data.document_date |
нет | string:date | null |
"2026-08-11" |
|||
data.closed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
нет | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
да | integer:int64 |
min: 0 | 1 |
||
data.processing |
да | SendDocumentProcessing |
|
|||
data.processing.mode |
нет | string | null |
"standard" |
|||
data.processing.pipeline |
да | array<string> |
|
|||
data.processing.pipeline[] |
нет | string |
"assignment" |
|||
data.processing.state |
нет | string | null |
"open" |
|||
data.processing.batch_profile_id |
нет | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
нет | object | null |
|
|||
data.processing.batch_profile.id |
да | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
да | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
нет | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
да | SendDocumentWildberries |
Wildberries document-level state and safe supply/QR/sticker artifact metadata. Binary label content and encrypted provider payloads are not returned. | |
||
data.wildberries.fulfillment_state |
нет | string | null |
"delivered" |
|||
data.wildberries.error_message |
нет | string | null |
"" |
|||
data.wildberries.processed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
да | array<object> |
|
|||
data.wildberries.supplies[] |
нет | object |
|
|||
data.orders |
да | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
нет | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
да | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
нет | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
нет | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
да | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
да | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
нет | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
нет | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
нет | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
нет | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
нет | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
нет | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
нет | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
нет | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
нет | number:float | null |
48.58 |
|||
data.orders[].order.contact |
нет | object | null |
|
|||
data.orders[].order.contact.first_name |
нет | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
нет | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
нет | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
нет | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
нет | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
нет | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
нет | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
нет | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
нет | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
нет | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
нет | object | null |
|
|||
data.orders[].order.delivery.service_id |
нет | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.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.orders[].order.delivery.is_courier |
да | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
нет | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
нет | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
нет | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
нет | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
нет | integer:int64 | null |
136 |
|||
data.orders[].order.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.orders[].order.delivery.label |
нет | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
нет | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
нет | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
нет | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
нет | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
нет | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
нет | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
да | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
нет | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
да | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
нет | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
нет | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
нет | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
нет | object | null |
|
|||
data.orders[].order.offers[].product.id |
да | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
нет | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
нет | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
да | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
нет | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
нет | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
нет | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
нет | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
нет | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
да | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
да | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
да | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
нет | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
нет | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
да | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
да | object |
|
|||
data.orders[].order.offers[].product.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
нет | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
да | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
да | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
да | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
да | number:float |
2 |
|||
data.orders[].order.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.orders[].order.offers[].reservation_items |
нет | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
нет | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
да | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
нет | DataMatrix |
Код DataMatrix для маркированного товара. | |
||
data.orders[].order.datamatrix_codes[].id |
да | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
нет | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
нет | enum:int64 | null |
enum: 0, 1, 2 | 0 - Imported and available for future warehouse operations. 1 - Reserved or attached by an operational document. 2 - Used by an outbound or completed operation. |
0 |
|
data.orders[].order.datamatrix_codes[].acceptance_id |
нет | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
нет | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
нет | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
нет | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
нет | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
нет | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
нет | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
нет | object | null |
|
|||
data.orders[].order.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
нет | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
нет | object | null |
|
|||
data.orders[].order.shop.id |
да | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
да | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
нет | integer:int64 | null |
1 |
|||
data.orders[].order.company |
нет | object | null |
|
|||
data.orders[].order.company.id |
да | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
да | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
нет | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
нет | object | null |
|
|||
data.orders[].order.accumulation_place |
нет | object | null |
|
|||
data.orders[].order.measurements |
нет | object | null |
|
|||
data.orders[].order.settings |
нет | object | null |
|
|||
data.orders[].order.consumables |
да | array<object> |
|
|||
data.orders[].order.consumables[] |
нет | object |
|
|||
data.orders[].order.wildberries |
нет | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
нет | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
да | array<object> |
|
|||
data.orders[].order.batch_matches[] |
нет | object |
|
|||
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": 740,
"domain_id": 3,
"status_id": 1,
"status": {
"id": 1,
"name": "Открыт",
"color": "#2457c5",
"background_color": "#eaf0ff"
},
"warehouse_id": 42,
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"delivery_service_ids": [
17
],
"delivery_services": [
{
"id": 17,
"name": "Wildberries FBS",
"status_id": 1,
"external_id": "wb-fbs",
"source_id": "wildberries",
"delivery_type": "pickup_point",
"is_courier": false
}
],
"document_date": "2026-08-11",
"closed_at": "2026-08-11T10:15:00Z",
"comment": "Wildberries shipment 740",
"order_count": 1,
"processing": {
"mode": "standard",
"pipeline": [
"assignment",
"marking",
"transfer"
],
"state": "open",
"batch_profile_id": null,
"batch_profile": null,
"composition_frozen_at": null,
"batch_started_at": null,
"batch_completed_at": null
},
"wildberries": {
"fulfillment_state": "delivered",
"error_message": null,
"processed_at": "2026-08-11T10:15:00Z",
"supplies": [
{
"id": 3201,
"account_id": 71,
"external_id": "WB-GI-740",
"name": "Поставка 740",
"state": "delivered",
"state_name": "Доставлена",
"destination_type": "office",
"destination_office_id": 507,
"is_automatic": false,
"is_b2b": false,
"cargo_type": "box",
"cross_border_type": null,
"order_count": 1,
"current_qr": {
"id": 3301,
"kind": "supply_qr",
"format": "svg",
"width": 580,
"height": 400,
"barcode": "WB-GI-740",
"part_a": null,
"part_b": null,
"content_hash": "sha256:qr-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:00:00Z",
"last_printed_at": null,
"print_count": 0
},
"boxes": [
],
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-11T09:00:00Z",
"remote_closed_at": null,
"last_synced_at": "2026-08-11T10:15:00Z",
"delivered_at": "2026-08-11T10:15:00Z"
}
]
},
"orders": [
{
"assignment_id": 8801,
"marked_at": "2026-08-11T09:30:00Z",
"created_at": "2026-08-11T09:00:00Z",
"updated_at": "2026-08-11T09:30:00Z",
"order": {
"id": 49060,
"external_id": "WB-900001234",
"status_id": 20,
"warehouse_id": 42,
"shop_id": 12,
"order_date": "2026-08-10",
"send_date": "2026-08-11",
"amounts": {
"shipping_price": 0,
"shipping_cost": 0,
"sum": 39.98,
"cod_sum": 0
},
"contact": {
"first_name": "Иван",
"middle_name": null,
"last_name": "Петров",
"phone": "+359888123456",
"email": "customer@example.com",
"country_id": 100,
"city_id": 200,
"postcode": "1000",
"latitude": 42.6977,
"longitude": 23.3219,
"full_address": "Sofia"
},
"delivery": {
"service_id": 17,
"delivery_type": "pickup_point",
"is_courier": false,
"status": "created",
"track_number": "WB-900001234",
"pickup_point_id": "WB-SOF-01",
"source_id": "wildberries",
"tariff_code": null,
"additional_services": {
},
"label": null,
"delivery_date": "2026-08-12",
"delivery_time_start": null,
"delivery_time_end": null
},
"comments": {
"delivery_service_text": null,
"inner_text": "Клиентский пример для документа 740"
},
"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,
"external_id": "EXT-10045",
"shop_id": 12,
"domain_id": 3,
"status_id": 1,
"type_id": 1,
"name": "Coffee 250g",
"article": "ART-001245",
"sku": "SKU-001245",
"price": 19.99,
"estimated_price": 21.5,
"image_url": null,
"dimensions": {
"x": 105,
"y": 200,
"z": 32,
"unit": "mm"
},
"weight": {
"value": 250,
"unit": "g"
},
"datamatrix_required": true,
"expiration_required": true,
"comment": null,
"description": "Ground coffee package",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"package": {
"kind": "unit",
"parent_product_id": null,
"base_product_id": null,
"multiplicity": null,
"base_multiplicity": null,
"depth": 0
},
"created_at": "2026-08-01T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
},
"reservation": {
"required_qty": 2,
"reserved_qty": 2,
"unreserved_qty": 0,
"missing_qty": 0,
"status": "reserved"
},
"reservation_items": [
],
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
],
"datamatrix_codes": [
{
"id": 6101,
"domain_id": 3,
"warehouse_id": 42,
"status_id": 1,
"acceptance_id": 5101,
"order_id": 49060,
"product_id": 1201,
"barcode": "04601234567890",
"short_code": "ABC123",
"crypto_tail": "CRYPTO",
"datamatrix": "010460123456789021ABC123",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"batch": "LOT-2026",
"created_at": "2026-08-11T09:15:00Z",
"updated_at": "2026-08-11T09:15:00Z",
"used_at": null
}
],
"warehouse": {
"id": 42,
"name": "Warehouse Sofia",
"type_id": 2,
"parent_id": 41
},
"shop": {
"id": 12,
"name": "Demo Online Store",
"status_id": 1
},
"company": {
"id": 7,
"name": "Demo Company",
"legal_name": "Demo Company Ltd."
},
"place": null,
"accumulation_place": null,
"measurements": {
"places": 1,
"dimensions": {
"x": 220,
"y": 160,
"z": 120,
"unit": "mm"
},
"weight": {
"value": 600,
"unit": "g"
}
},
"settings": {
"blank_url": null
},
"consumables": [
],
"wildberries": {
"id": 2101,
"account_id": 71,
"wb_order_id": "900001234",
"order_uid": "WB-UID-49060",
"rid": "WB-RID-49060",
"product_id": 1201,
"state": "confirmed",
"state_name": "Подтверждён",
"fulfillment_state": "delivered",
"fulfillment_state_name": "Доставлен",
"supplier_status": "confirm",
"wb_status": "sold",
"supply_id": 3201,
"external_supply_id": "WB-GI-740",
"supply_state": "delivered",
"delivery_type": "fbs",
"cross_border_type": null,
"is_b2b": false,
"wb_warehouse_id": 507,
"office_id": 507,
"nm_id": 12345678,
"chrt_id": 87654321,
"article": "ART-001245",
"skus": [
"4601234567890"
],
"required_meta": [
"sgtin"
],
"optional_meta": [
],
"meta_state": "accepted",
"sticker_state": "ready",
"prices": {
"price_minor": 1999,
"final_price_minor": 1999,
"sale_price_minor": 1999,
"currency": "RUB"
},
"markings": [
{
"id": 1,
"datamatrix_id": 6101,
"type": "sgtin",
"masked_value": "010460…ABC123",
"value_hash": "sha256:example",
"state": "accepted",
"remote_decision": "accepted",
"error_code": null,
"error_message": null,
"submitted_at": "2026-08-11T09:30:00Z",
"verified_at": "2026-08-11T09:31:00Z",
"ambiguous_at": null
}
],
"current_sticker": {
"id": 3401,
"kind": "order_sticker",
"format": "png",
"width": 580,
"height": 400,
"barcode": "WB-900001234",
"part_a": "123456",
"part_b": "7890",
"content_hash": "sha256:sticker-example",
"content_available": true,
"is_current": true,
"fetched_at": "2026-08-11T09:25:00Z",
"last_printed_at": null,
"print_count": 0
},
"last_error": {
"code": null,
"message": null
},
"remote_created_at": "2026-08-10T09:00:00Z",
"seller_date": "2026-08-10",
"delivery_date": "2026-08-12",
"confirmed_at": "2026-08-11T09:20:00Z",
"completed_at": "2026-08-11T10:15:00Z",
"imported_at": "2026-08-10T09:05:00Z",
"mapped_at": "2026-08-10T09:06:00Z",
"reserved_at": "2026-08-11T09:10:00Z",
"remote_status_checked_at": "2026-08-11T10:15:00Z"
},
"batch_matches": [
]
}
}
],
"created_at": "2026-08-11T08:45:00Z",
"updated_at": "2026-08-11T10:15: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 Конфликт
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"The given data was invalid." |
|||
error |
нет | string |
"VALIDATION_ERROR" |
|||
errors |
да | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Примеры ответа
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
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"
}
Магазины
Получить список магазинов
| operationId | listShops |
|---|---|
| Раздел | Магазины |
| Безопасность | bearerAuth |
Возвращает магазины, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/shops" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, name, status_id, owner_user_id, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
1 |
domain_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по domain_id с точным совпадением. Этот фильтр также можно передать как filter[domain_id], если это поддерживает Laravel query adapter. |
3 |
owner_user_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по owner_user_id с точным совпадением. Этот фильтр также можно передать как filter[owner_user_id], если это поддерживает Laravel query adapter. |
15 |
name |
query | нет | string |
form | true | Фильтр по name с частичным текстовым совпадением. Этот фильтр также можно передать как filter[name], если это поддерживает Laravel query adapter. |
"Coffee" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<Shop> |
|
|||
data[] |
нет | Shop |
Аккаунт магазина продавца. | |
||
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[].name |
да | string |
"Demo Online Store" |
|||
data[].status_id |
нет | integer:int64 | null |
1 |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data[].composite_items_enabled |
нет | boolean |
false |
|||
data[].custom_label_enabled |
нет | boolean |
false |
|||
data[].custom_label |
нет | string | null |
"CDEK label" |
|||
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": 12,
"name": "Demo Online Store",
"status_id": 1,
"domain_id": 3,
"owner_user_id": 15,
"composite_items_enabled": false,
"custom_label_enabled": false,
"custom_label": null,
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/shops?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/shops?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/shops?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/shops",
"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"
}
Создать магазин
| operationId | createShops |
|---|---|
| Раздел | Магазины |
| Безопасность | bearerAuth |
Create shop. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/shops" \
--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" |
Тело запроса
CreateShopRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateShopPayload |
|
|||
data.name |
да | string |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
Примеры запроса
default
{
"data": {
"name": "Demo Online Store",
"owner_user_id": 15
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Shop |
Аккаунт магазина продавца. | |
||
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.name |
да | string |
"Demo Online Store" |
|||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
|||
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": 12,
"name": "Demo Online Store",
"status_id": 1,
"domain_id": 3,
"owner_user_id": 15,
"composite_items_enabled": false,
"custom_label_enabled": false,
"custom_label": null,
"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"
}
Получить магазин
| operationId | getShops |
|---|---|
| Раздел | Магазины |
| Безопасность | bearerAuth |
Возвращает один ресурс: магазин, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/shops/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID магазина. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Shop |
Аккаунт магазина продавца. | |
||
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.name |
да | string |
"Demo Online Store" |
|||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
|||
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": 12,
"name": "Demo Online Store",
"status_id": 1,
"domain_id": 3,
"owner_user_id": 15,
"composite_items_enabled": false,
"custom_label_enabled": false,
"custom_label": null,
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Обновить магазин
| operationId | replaceShops |
|---|---|
| Раздел | Магазины |
| Безопасность | bearerAuth |
Update shop. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/shops/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" |
Тело запроса
ReplaceShopRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ReplaceShopPayload |
Legacy PUT payload. Текущий backend применяет семантику частичного обновления. | |
||
data.name |
нет | string | null |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
Примеры запроса
default
{
"data": {
"name": "Demo Online Store",
"custom_label_enabled": false
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Shop |
Аккаунт магазина продавца. | |
||
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.name |
да | string |
"Demo Online Store" |
|||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
|||
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": 12,
"name": "Demo Online Store",
"status_id": 1,
"domain_id": 3,
"owner_user_id": 15,
"composite_items_enabled": false,
"custom_label_enabled": false,
"custom_label": null,
"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"
}
Обновить магазин
| operationId | patchShops |
|---|---|
| Раздел | Магазины |
| Безопасность | bearerAuth |
Update shop. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/shops/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" |
Тело запроса
PatchShopRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | PatchShopPayload |
|
|||
data.name |
нет | string | null |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
Примеры запроса
default
{
"data": {
"custom_label_enabled": false
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Shop |
Аккаунт магазина продавца. | |
||
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.name |
да | string |
"Demo Online Store" |
|||
data.status_id |
нет | integer:int64 | null |
1 |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
нет | boolean |
false |
|||
data.custom_label_enabled |
нет | boolean |
false |
|||
data.custom_label |
нет | string | null |
"CDEK label" |
|||
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": 12,
"name": "Demo Online Store",
"status_id": 1,
"domain_id": 3,
"owner_user_id": 15,
"composite_items_enabled": false,
"custom_label_enabled": false,
"custom_label": null,
"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"
}
Движения остатков
Получить журнал движений остатков
| operationId | listStockMovements |
|---|---|
| Раздел | Движения остатков |
| Безопасность | bearerAuth |
Возвращает движения остатков, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
For incremental export, request sort=id&after_id=<last_seen_id>. The after_id boundary is exclusive. Use the greatest returned id as the next high-water mark. The endpoint does not provide snapshot isolation; rows inserted concurrently with greater IDs may appear in later calls.
Both sides of one relocation use movement_type=stock_transfer and share the same non-null movement_group_id; use that opaque value to correlate the negative and positive rows.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Since the picking-lot update, actual picking appends two atomic order rows: operation=reservation_release has positive quantity_delta for the former reservation, and operation=physical_issue has negative quantity_delta with the actual batch, production_date and expiration_date. Each pair shares movement_group_id and sums to zero, preserving cumulative availability. Do not sum only negative order rows as consumption: that would count both the reservation and the physical issue. Use source=order_picking.issue to select new physical issues. Earlier rows are not rewritten; historical current picked lots can be read from orders.
transfer_kind distinguishes within_warehouse (document types 3/4) and between_warehouses (6/7); movement_group_id is opaque. stock_after remains null. The journal does not cover every manual loss/correction path.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/stock-movements" \
--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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, occurred_at, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
after_id |
query | нет | integer:int64 |
form | true | min: 0 | Для инкрементальной выгрузки используйте sort=id и after_id. Граница after_id исключающая (id > after_id). Этот фильтр также можно передать как filter[after_id], если это поддерживает Laravel query adapter. |
1000 |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
document_type_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по document_type_id с точным совпадением. Этот фильтр также можно передать как filter[document_type_id], если это поддерживает Laravel query adapter. |
1 |
document_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по document_id с точным совпадением. Этот фильтр также можно передать как filter[document_id], если это поддерживает Laravel query adapter. |
5101 |
movement_type |
query | нет | string |
form | true | Фильтр по movement_type с точным совпадением. Этот фильтр также можно передать как filter[movement_type], если это поддерживает Laravel query adapter. |
"stock_transfer" |
|
movement_group_id |
query | нет | string |
form | true | Фильтр по movement_group_id с точным совпадением. Этот фильтр также можно передать как filter[movement_group_id], если это поддерживает Laravel query adapter. |
"relocation:1722099600000000" |
|
source |
query | нет | string |
form | true | Фильтр по source с точным совпадением. Этот фильтр также можно передать как filter[source], если это поддерживает Laravel query adapter. |
"api" |
|
barcode |
query | нет | string |
form | true | Фильтр по barcode с частичным текстовым совпадением. Этот фильтр также можно передать как filter[barcode], если это поддерживает Laravel query adapter. |
"4601234567890" |
|
batch |
query | нет | string |
form | true | Фильтр по batch с частичным текстовым совпадением. Этот фильтр также можно передать как filter[batch], если это поддерживает Laravel query adapter. |
"LOT-2026" |
|
occurred_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для occurred_at. Этот фильтр также можно передать как filter[occurred_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
occurred_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для occurred_at. Этот фильтр также можно передать как filter[occurred_at_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" |
|
production_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для production_date. Этот фильтр также можно передать как filter[production_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для expiration_date. Этот фильтр также можно передать как filter[expiration_date_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<StockMovement> |
|
|||
data[] |
нет | StockMovement |
Строка append-only журнала движений остатков. | |
||
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[].movement_type |
да | StockMovementType |
Stock movement type emitted by the backend. Current values are acceptance, order, stock_transfer, inventory, quant_unpacking, and movement. The set may grow when new document sources are added. |
"stock_transfer" |
||
data[].movement_group_id |
да | string | null |
Opaque correlation ID shared by both sides of one relocation or stock-transfer line. | "relocation:1722099600000000" |
||
data[].source |
нет | string | null |
"api" |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_product_id |
нет | integer:int64 | null |
min: 1 | 1200 |
||
data[].quantity_delta |
нет | number:float | null |
-2 |
|||
data[].base_quantity_delta |
нет | number:float | null |
-12 |
|||
data[].stock_after |
нет | number:float | null |
18 |
|||
data[].document |
нет | StockMovementDocument |
|
|||
data[].document.type_id |
нет | integer:int64 | null |
3 |
|||
data[].document.id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].document.line_id |
нет | integer:int64 | null |
min: 1 | 7001 |
||
data[].place_id |
нет | integer:int64 | null |
min: 1 | 501 |
||
data[].barcode |
нет | string | null |
"4601234567890" |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].occurred_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].transfer_kind |
нет | enum | null |
enum: within_warehouse, between_warehouses | "within_warehouse" |
||
data[].operation |
нет | enum | null |
enum: reservation_release, physical_issue | Set for new picking audit pairs; null for older and other operations. | "physical_issue" |
|
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": 120001,
"movement_type": "stock_transfer",
"movement_group_id": "relocation:1722099600000000",
"source": "api",
"domain_id": 3,
"warehouse_id": 42,
"product_id": 1201,
"base_product_id": 1200,
"quantity_delta": -2,
"base_quantity_delta": -12,
"stock_after": null,
"document": {
"type_id": 3
},
"place_id": 501,
"barcode": "4601234567890",
"batch": "LOT-2026",
"production_date": "2026-01-15",
"expiration_date": "2027-01-15",
"occurred_at": "2026-07-14T10:30:00Z",
"created_at": "2026-07-14T10:30:00Z",
"updated_at": "2026-07-14T10:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/stock-movements?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/stock-movements",
"per_page": 100,
"to": 100,
"total": 123
}
}
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"
}
Пользователи
Получить список пользователей
| operationId | listUsers |
|---|---|
| Раздел | Пользователи |
| Безопасность | bearerAuth |
Возвращает пользователей, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users" \
--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, name, email, domain_id, warehouse_id, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
domain_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по domain_id с точным совпадением. Этот фильтр также можно передать как filter[domain_id], если это поддерживает Laravel query adapter. |
3 |
warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[warehouse_id], если это поддерживает Laravel query adapter. |
42 |
parent_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по parent_id с точным совпадением. Этот фильтр также можно передать как filter[parent_id], если это поддерживает Laravel query adapter. |
1 |
data_scope |
query | нет | string |
form | true | Фильтр по data_scope с точным совпадением. Этот фильтр также можно передать как filter[data_scope], если это поддерживает Laravel query adapter. |
"domain" |
|
name |
query | нет | string |
form | true | Фильтр по name с частичным текстовым совпадением. Этот фильтр также можно передать как filter[name], если это поддерживает Laravel query adapter. |
"Coffee" |
|
email |
query | нет | string |
form | true | Фильтр по email с частичным текстовым совпадением. Этот фильтр также можно передать как filter[email], если это поддерживает Laravel query adapter. |
"client.manager@nwms.cloud" |
|
id_from |
query | нет | number:float |
form | true | Нижняя включительная числовая граница для id. Этот фильтр также можно передать как filter[id_from], если это поддерживает Laravel query adapter. |
19.99 |
|
id_to |
query | нет | number:float |
form | true | Верхняя включительная числовая граница для id. Этот фильтр также можно передать как filter[id_to], если это поддерживает Laravel query adapter. |
19.99 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<User> |
|
|||
data[] |
нет | User |
Аутентифицированный или видимый пользователь NWMS. | |
||
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[].name |
да | string |
"Client Manager" |
|||
data[].email |
да | string:email |
"client.manager@nwms.cloud" |
|||
data[].language |
нет | string | null |
"en" |
|||
data[].storage_id |
нет | string | null |
"default" |
|||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data[].parent_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data[].data_scope |
нет | string | null |
"domain" |
|||
data[].roles |
нет | array<string> |
|
|||
data[].roles[] |
нет | string |
"clients" |
|||
data[].domain |
нет | object | null |
|
|||
data[].domain.id |
да | integer:int64 |
min: 1 | 3 |
||
data[].domain.name |
да | string |
"Demo Domain" |
|||
data[].warehouse |
нет | object | null |
|
|||
data[].warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
да | string |
"Warehouse Sofia" |
|||
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": 15,
"name": "Client Manager",
"email": "client.manager@nwms.cloud",
"language": "en",
"storage_id": "default",
"domain_id": 3,
"warehouse_id": 42,
"parent_id": null,
"data_scope": "domain",
"roles": [
"clients"
],
"domain": {
"id": 3,
"name": "Demo Domain"
},
"warehouse": {
"id": 42,
"name": "Warehouse Sofia"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/users?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/users?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/users?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/users",
"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"
}
Получить пользователя
| operationId | getUsers |
|---|---|
| Раздел | Пользователи |
| Безопасность | bearerAuth |
Возвращает один ресурс: пользователь, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID пользователя. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | User |
Аутентифицированный или видимый пользователь NWMS. | |
||
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.name |
да | string |
"Client Manager" |
|||
data.email |
да | string:email |
"client.manager@nwms.cloud" |
|||
data.language |
нет | string | null |
"en" |
|||
data.storage_id |
нет | string | null |
"default" |
|||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.data_scope |
нет | string | null |
"domain" |
|||
data.roles |
нет | array<string> |
|
|||
data.roles[] |
нет | string |
"clients" |
|||
data.domain |
нет | object | null |
|
|||
data.domain.id |
да | integer:int64 |
min: 1 | 3 |
||
data.domain.name |
да | string |
"Demo Domain" |
|||
data.warehouse |
нет | object | null |
|
|||
data.warehouse.id |
да | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
да | string |
"Warehouse Sofia" |
|||
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": 15,
"name": "Client Manager",
"email": "client.manager@nwms.cloud",
"language": "en",
"storage_id": "default",
"domain_id": 3,
"warehouse_id": 42,
"parent_id": null,
"data_scope": "domain",
"roles": [
"clients"
],
"domain": {
"id": 3,
"name": "Demo Domain"
},
"warehouse": {
"id": 42,
"name": "Warehouse Sofia"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Склады
Получить список складов
| operationId | listWarehouses |
|---|---|
| Раздел | Склады |
| Безопасность | bearerAuth |
Возвращает склады, видимые аутентифицированному аккаунту. Используйте описанные query parameters для фильтрации, сортировки и пагинации.
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.
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.
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.
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.
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.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/warehouses" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, name, status_id, type_id, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
1 |
type_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по type_id с точным совпадением. Этот фильтр также можно передать как filter[type_id], если это поддерживает Laravel query adapter. |
1 |
domain_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по domain_id с точным совпадением. Этот фильтр также можно передать как filter[domain_id], если это поддерживает Laravel query adapter. |
3 |
owner_user_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по owner_user_id с точным совпадением. Этот фильтр также можно передать как filter[owner_user_id], если это поддерживает Laravel query adapter. |
15 |
parent_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по parent_id с точным совпадением. Этот фильтр также можно передать как filter[parent_id], если это поддерживает Laravel query adapter. |
1 |
country_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по country_id с точным совпадением. Этот фильтр также можно передать как filter[country_id], если это поддерживает Laravel query adapter. |
100 |
company_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по company_id с точным совпадением. Этот фильтр также можно передать как filter[company_id], если это поддерживает Laravel query adapter. |
7 |
service_provider_company_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по service_provider_company_id с точным совпадением. Этот фильтр также можно передать как filter[service_provider_company_id], если это поддерживает Laravel query adapter. |
8 |
name |
query | нет | string |
form | true | Фильтр по name с частичным текстовым совпадением. Этот фильтр также можно передать как filter[name], если это поддерживает Laravel query adapter. |
"Coffee" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<Warehouse> |
|
|||
data[] |
нет | Warehouse |
Склад или клиентский склад. | |
||
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[].name |
да | string |
"Warehouse Sofia" |
|||
data[].status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data[].type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data[].domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data[].parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data[].country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data[].currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data[].company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data[].service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data[].billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data[].settings |
нет | WarehouseSettings |
|
|||
data[].settings.datamatrix |
нет | object |
|
|||
data[].settings.datamatrix.enabled |
да | boolean |
false |
|||
data[].settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data[].settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data[].settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data[].settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data[].settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data[].settings.expiration_date_enabled |
нет | boolean |
true |
|||
data[].settings.production_date_enabled |
нет | boolean |
true |
|||
data[].settings.batch_enabled |
нет | boolean |
true |
|||
data[].settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data[].settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data[].settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data[].settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data[].document |
нет | WarehouseDocument |
|
|||
data[].document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data[].document.date |
нет | string:date | null |
"2026-07-14" |
|||
data[].custom |
нет | object |
Специфичные для установки атрибуты склада. | {"billing_group":"Sofia A"} |
||
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": 42,
"name": "Warehouse Sofia",
"status_id": 1,
"type_id": 2,
"domain_id": 3,
"owner_user_id": 15,
"parent_id": 41,
"country_id": 100,
"currency_id": 978,
"company_id": 7,
"service_provider_company_id": 8,
"billing_setting_id": 12,
"settings": {
"datamatrix": {
"enabled": true,
"type": "standard",
"acceptance_enabled": true,
"picking_enabled": true,
"packing_enabled": false
},
"expiration_date_enabled": true,
"production_date_enabled": true,
"batch_enabled": true,
"auto_acceptance_enabled": false,
"order_auto_conduct_mode": 0,
"require_acceptance_dimensions": false
},
"document": {
"number": "WH-DOC-1001",
"date": "2026-07-14"
},
"custom": {
"billing_group": "Sofia A"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/warehouses?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/warehouses?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/warehouses?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/warehouses",
"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"
}
Создать склад
| operationId | createWarehouses |
|---|---|
| Раздел | Склады |
| Безопасность | bearerAuth |
Creates a warehouse or client warehouse using public v2 fields. Ownership, parent warehouse, billing settings, and operational flags are validated by account scope.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/warehouses" \
--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" |
Тело запроса
CreateWarehouseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CreateWarehousePayload |
|
|||
data.name |
да | string |
minLength: 1 | "Client Warehouse Varna" |
||
data.type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | object | null |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | object | null |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
{"billing_group":"Varna B"} |
Примеры запроса
default
{
"data": {
"name": "Client Warehouse Varna",
"type_id": 2,
"parent_id": 42
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Warehouse |
Склад или клиентский склад. | |
||
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.name |
да | string |
"Warehouse Sofia" |
|||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | WarehouseSettings |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | WarehouseDocument |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
Специфичные для установки атрибуты склада. | {"billing_group":"Sofia A"} |
||
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": 42,
"name": "Warehouse Sofia",
"status_id": 1,
"type_id": 2,
"domain_id": 3,
"owner_user_id": 15,
"parent_id": 41,
"country_id": 100,
"currency_id": 978,
"company_id": 7,
"service_provider_company_id": 8,
"billing_setting_id": 12,
"settings": {
"datamatrix": {
"enabled": true,
"type": "standard",
"acceptance_enabled": true,
"picking_enabled": true,
"packing_enabled": false
},
"expiration_date_enabled": true,
"production_date_enabled": true,
"batch_enabled": true,
"auto_acceptance_enabled": false,
"order_auto_conduct_mode": 0,
"require_acceptance_dimensions": false
},
"document": {
"number": "WH-DOC-1001",
"date": "2026-07-14"
},
"custom": {
"billing_group": "Sofia A"
},
"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"
}
Получить склад
| operationId | getWarehouses |
|---|---|
| Раздел | Склады |
| Безопасность | bearerAuth |
Возвращает один ресурс: склад, если он существует и видим аутентифицированному аккаунту.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/warehouses/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
id |
path | да | integer:int64 |
min: 1 | ID склада. | 1001 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Warehouse |
Склад или клиентский склад. | |
||
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.name |
да | string |
"Warehouse Sofia" |
|||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | WarehouseSettings |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | WarehouseDocument |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
Специфичные для установки атрибуты склада. | {"billing_group":"Sofia A"} |
||
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": 42,
"name": "Warehouse Sofia",
"status_id": 1,
"type_id": 2,
"domain_id": 3,
"owner_user_id": 15,
"parent_id": 41,
"country_id": 100,
"currency_id": 978,
"company_id": 7,
"service_provider_company_id": 8,
"billing_setting_id": 12,
"settings": {
"datamatrix": {
"enabled": true,
"type": "standard",
"acceptance_enabled": true,
"picking_enabled": true,
"packing_enabled": false
},
"expiration_date_enabled": true,
"production_date_enabled": true,
"batch_enabled": true,
"auto_acceptance_enabled": false,
"order_auto_conduct_mode": 0,
"require_acceptance_dimensions": false
},
"document": {
"number": "WH-DOC-1001",
"date": "2026-07-14"
},
"custom": {
"billing_group": "Sofia A"
},
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"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"
}
Обновить склад
| operationId | replaceWarehouses |
|---|---|
| Раздел | Склады |
| Безопасность | bearerAuth |
Updates editable warehouse fields. Operational flags, document metadata, billing setting, and custom attributes may be changed when permitted.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/warehouses/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" |
Тело запроса
ReplaceWarehouseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | ReplaceWarehousePayload |
Legacy PUT payload. Текущий backend применяет семантику частичного обновления. | |
||
data.name |
нет | string | null |
minLength: 1 | "Client Warehouse Varna" |
||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | object | null |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | object | null |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
{"billing_group":"Varna B"} |
Примеры запроса
default
{
"data": {
"name": "Client Warehouse Varna",
"billing_setting_id": 12
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Warehouse |
Склад или клиентский склад. | |
||
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.name |
да | string |
"Warehouse Sofia" |
|||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | WarehouseSettings |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | WarehouseDocument |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
Специфичные для установки атрибуты склада. | {"billing_group":"Sofia A"} |
||
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": 42,
"name": "Warehouse Sofia",
"status_id": 1,
"type_id": 2,
"domain_id": 3,
"owner_user_id": 15,
"parent_id": 41,
"country_id": 100,
"currency_id": 978,
"company_id": 7,
"service_provider_company_id": 8,
"billing_setting_id": 12,
"settings": {
"datamatrix": {
"enabled": true,
"type": "standard",
"acceptance_enabled": true,
"picking_enabled": true,
"packing_enabled": false
},
"expiration_date_enabled": true,
"production_date_enabled": true,
"batch_enabled": true,
"auto_acceptance_enabled": false,
"order_auto_conduct_mode": 0,
"require_acceptance_dimensions": false
},
"document": {
"number": "WH-DOC-1001",
"date": "2026-07-14"
},
"custom": {
"billing_group": "Sofia A"
},
"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"
}
Обновить склад
| operationId | patchWarehouses |
|---|---|
| Раздел | Склады |
| Безопасность | bearerAuth |
Update warehouse. Запрос использует описанную payload-схему, проверяет видимость tenant и возвращает нормализованный API envelope.
Текущее поведение backend является legacy-семантикой частичного обновления: пропущенные поля не изменяются.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/warehouses/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" |
Тело запроса
PatchWarehouseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | PatchWarehousePayload |
|
|||
data.name |
нет | string | null |
minLength: 1 | "Client Warehouse Varna" |
||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | object | null |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | object | null |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
{"billing_group":"Varna B"} |
Примеры запроса
default
{
"data": {
"billing_setting_id": 12
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | Warehouse |
Склад или клиентский склад. | |
||
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.name |
да | string |
"Warehouse Sofia" |
|||
data.status_id |
нет | integer:int64 | null |
ID статуса склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 1 |
||
data.type_id |
нет | integer:int64 | null |
ID типа склада. Значения хранятся в базе данных и не моделируются как закрытый enum в публичном контракте. | 2 |
||
data.domain_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
нет | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
нет | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
нет | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
нет | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
нет | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
нет | WarehouseSettings |
|
|||
data.settings.datamatrix |
нет | object |
|
|||
data.settings.datamatrix.enabled |
да | boolean |
false |
|||
data.settings.datamatrix.type |
нет | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
да | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
нет | enum:int64 |
enum: 0, 1, 2 | 0 disabled, 1 template validation, 2 database validation. Read from warehouse DataMatrix settings. | 1 |
|
data.settings.expiration_date_enabled |
нет | boolean |
true |
|||
data.settings.production_date_enabled |
нет | boolean |
true |
|||
data.settings.batch_enabled |
нет | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
нет | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
нет | enum:int64 | null |
enum: 0, 1, 2, 3 | Разрешение на явные действия автопроведения заказа: 0 — запрещено; 1 — пропуск сборки; 2 — пропуск упаковки; 3 — пропуск сборки и упаковки. Сама настройка не выполняет эти действия и не подтверждает передачу перевозчику. Автоупаковка заблокирована при включённой проверке DataMatrix на упаковке. | 0 |
|
data.settings.require_acceptance_dimensions |
нет | boolean |
false |
|||
data.settings.crossdock_enabled |
нет | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
нет | WarehouseDocument |
|
|||
data.document.number |
нет | string | null |
"WH-DOC-1001" |
|||
data.document.date |
нет | string:date | null |
"2026-07-14" |
|||
data.custom |
нет | object |
Специфичные для установки атрибуты склада. | {"billing_group":"Sofia A"} |
||
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": 42,
"name": "Warehouse Sofia",
"status_id": 1,
"type_id": 2,
"domain_id": 3,
"owner_user_id": 15,
"parent_id": 41,
"country_id": 100,
"currency_id": 978,
"company_id": 7,
"service_provider_company_id": 8,
"billing_setting_id": 12,
"settings": {
"datamatrix": {
"enabled": true,
"type": "standard",
"acceptance_enabled": true,
"picking_enabled": true,
"packing_enabled": false
},
"expiration_date_enabled": true,
"production_date_enabled": true,
"batch_enabled": true,
"auto_acceptance_enabled": false,
"order_auto_conduct_mode": 0,
"require_acceptance_dimensions": false
},
"document": {
"number": "WH-DOC-1001",
"date": "2026-07-14"
},
"custom": {
"billing_group": "Sofia A"
},
"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"
}
Кросс-докинг
Получить список cross-dock-кейсов
| operationId | crossDockListCases |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock cases in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases" \
--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: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, planned_arrival_at, planned_departure_at, created_at, updated_at. По умолчанию: -id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"-id" |
include |
query | нет | string |
form | false | Связанные сущности через запятую. Допустимые значения: acceptance, orders, targets. Этот фильтр также можно передать как filter[include], если это поддерживает Laravel query adapter. |
"acceptance,orders,targets" |
|
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
physical_warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по physical_warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[physical_warehouse_id], если это поддерживает Laravel query adapter. |
41 |
client_warehouse_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по client_warehouse_id с точным совпадением. Этот фильтр также можно передать как filter[client_warehouse_id], если это поддерживает Laravel query adapter. |
43 |
acceptance_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по acceptance_id с точным совпадением. Этот фильтр также можно передать как filter[acceptance_id], если это поддерживает Laravel query adapter. |
1 |
planned_arrival_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для planned_arrival_at. Этот фильтр также можно передать как filter[planned_arrival_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
planned_arrival_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для planned_arrival_at. Этот фильтр также можно передать как filter[planned_arrival_at_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" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockCase> |
|
|||
data[] |
нет | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].external_id |
нет | string | null |
"XD-2026-001" |
|||
data[].domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data[].physical_warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data[].client_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data[].process_version |
да | string |
"direct_order_v1" |
|||
data[].status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data[].status_before_exception |
нет | string | null |
"released" |
|||
data[].plan_hash |
нет | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data[].strategy_version |
нет | string | null |
"fifo-v1" |
|||
data[].planned_arrival_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].planned_departure_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].planned_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].released_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
да | integer:int64 |
min: 1 | 4 |
||
data[].acceptance |
нет | object | null |
|
|||
data[].acceptance.id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].acceptance.external_id |
нет | string | null |
"ASN-100245" |
|||
data[].acceptance.type_id |
да | integer:int64 |
1 |
|||
data[].acceptance.type_code |
да | string |
"crossdock" |
|||
data[].acceptance.status_id |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKCASE000000001",
"domain_id": 3,
"physical_warehouse_id": 42,
"process_version": "direct_order_v1",
"status": "released",
"version": 4
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases",
"per_page": 50,
"to": 50,
"total": 73
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить cross-dock-кейс
| operationId | crossDockGetCase |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Get cross-dock case in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
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.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.external_id |
нет | string | null |
"XD-2026-001" |
|||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.physical_warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.client_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.process_version |
да | string |
"direct_order_v1" |
|||
data.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data.status_before_exception |
нет | string | null |
"released" |
|||
data.plan_hash |
нет | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data.strategy_version |
нет | string | null |
"fifo-v1" |
|||
data.planned_arrival_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.released_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.version |
да | integer:int64 |
min: 1 | 4 |
||
data.acceptance |
нет | object | null |
|
|||
data.acceptance.id |
да | integer:int64 |
min: 1 | 5101 |
||
data.acceptance.external_id |
нет | string | null |
"ASN-100245" |
|||
data.acceptance.type_id |
да | integer:int64 |
1 |
|||
data.acceptance.type_code |
да | string |
"crossdock" |
|||
data.acceptance.status_id |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKCASE000000001",
"domain_id": 3,
"physical_warehouse_id": 42,
"process_version": "direct_order_v1",
"status": "released",
"version": 4
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Обновить реквизиты cross-dock-кейса
| operationId | crossDockUpdateCaseMetadata |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Update cross-dock case metadata in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockUpdateCaseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 3 |
||
data.external_id |
нет | string | null |
maxLength: 190 | "XD-2026-001" |
||
data.planned_arrival_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
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.public_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.external_id |
нет | string | null |
"XD-2026-001" |
|||
data.domain_id |
да | integer:int64 |
min: 1 | 3 |
||
data.physical_warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data.client_warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.client_id |
нет | integer:int64 | null |
min: 1 | 15 |
||
data.process_version |
да | string |
"direct_order_v1" |
|||
data.status |
да | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data.status_before_exception |
нет | string | null |
"released" |
|||
data.plan_hash |
нет | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data.strategy_version |
нет | string | null |
"fifo-v1" |
|||
data.planned_arrival_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.released_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.version |
да | integer:int64 |
min: 1 | 4 |
||
data.acceptance |
нет | object | null |
|
|||
data.acceptance.id |
да | integer:int64 |
min: 1 | 5101 |
||
data.acceptance.external_id |
нет | string | null |
"ASN-100245" |
|||
data.acceptance.type_id |
да | integer:int64 |
1 |
|||
data.acceptance.type_code |
да | string |
"crossdock" |
|||
data.acceptance.status_id |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKCASE000000001",
"domain_id": 3,
"physical_warehouse_id": 42,
"process_version": "direct_order_v1",
"status": "released",
"version": 4
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить распределения cross-dock
| operationId | crossDockListAllocations |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock allocations in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/allocations" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
state |
query | нет | string |
form | true | Фильтр по state с точным совпадением. Этот фильтр также можно передать как filter[state], если это поддерживает Laravel query adapter. |
"ready" |
|
supply_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по supply_id с точным совпадением. Этот фильтр также можно передать как filter[supply_id], если это поддерживает Laravel query adapter. |
1 |
demand_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по demand_id с точным совпадением. Этот фильтр также можно передать как filter[demand_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockAllocation> |
|
|||
data[] |
нет | CrossDockAllocation |
Planner decision assigning supply to demand. | |
||
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[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].supply_id |
да | integer:int64 |
min: 1 | 4201 |
||
data[].demand_id |
да | integer:int64 |
min: 1 | 4251 |
||
data[].base_quantity |
да | number:float |
4 |
|||
data[].released_base_quantity |
нет | number:float |
4 |
|||
data[].short_base_quantity |
нет | number:float |
0 |
|||
data[].state |
да | string |
"ready" |
|||
data[].state_before_exception |
нет | string | null |
"ready" |
|||
data[].match_score |
нет | number:float |
1 |
|||
data[].match_reason |
нет | object |
|
|||
data[].match_reason.reason_codes |
нет | array<string> |
|
|||
data[].match_reason.reason_codes[] |
нет | string |
"base_product_match" |
|||
data[].version |
да | integer:int64 |
2 |
|||
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": 1001,
"case_id": 4101,
"supply_id": 4201,
"demand_id": 4251,
"base_quantity": 4,
"released_base_quantity": 4,
"short_base_quantity": 0,
"state": "ready",
"match_score": 1,
"version": 2
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/allocations",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Отменить cross-dock-кейс
| operationId | crossDockCancelCase |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Cancel cross-dock case in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/cancel" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCancelCaseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 3 |
||
data.reason |
да | string |
maxLength: 5000 | "Supplier cancelled shipment" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"reason": "Supplier cancelled shipment"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Закрыть cross-dock-кейс
| operationId | crossDockCloseCase |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Close cross-dock case in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/close" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCloseCaseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 8 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 8
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить потребности cross-dock
| operationId | crossDockListDemands |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock demands in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/demands" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, priority, cutoff_at, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
state |
query | нет | string |
form | true | Фильтр по state с точным совпадением. Этот фильтр также можно передать как filter[state], если это поддерживает Laravel query adapter. |
"ready" |
|
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
target_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по target_id с точным совпадением. Этот фильтр также можно передать как filter[target_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockDemand> |
|
|||
data[] |
нет | CrossDockDemand |
Outbound product demand linked to one order and target. | |
||
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[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].order_id |
да | integer:int64 |
min: 1 | 8101 |
||
data[].order_line_id |
да | integer:int64 |
min: 1 | 8201 |
||
data[].target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
да | number:float |
4 |
|||
data[].base_quantity |
да | number:float |
4 |
|||
data[].allocated_base_quantity |
нет | number:float |
4 |
|||
data[].fulfilled_base_quantity |
нет | number:float |
2 |
|||
data[].state |
да | string |
"released" |
|||
data[].state_before_exception |
нет | string | null |
"released" |
|||
data[].priority |
нет | integer:int64 |
100 |
|||
data[].cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].ship_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].source_policy |
нет | enum | null |
enum: crossdock_only, crossdock_then_stock, stock_allowed | "crossdock_only" |
||
data[].destination_ref |
нет | string | null |
"SOF-LANE-1" |
|||
data[].carrier_ref |
нет | string | null |
"CDEK" |
|||
data[].route_ref |
нет | string | null |
"BG-SOF" |
|||
data[].version |
да | integer:int64 |
2 |
|||
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": 1001,
"case_id": 4101,
"order_id": 8101,
"order_line_id": 8201,
"target_id": 4301,
"product_id": 1201,
"base_product_id": 1201,
"quantity": 4,
"base_quantity": 4,
"allocated_base_quantity": 4,
"fulfilled_base_quantity": 2,
"state": "released",
"priority": 100,
"version": 2
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/demands",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить события аудита cross-dock
| operationId | crossDockListEvents |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock events in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/events" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, occurred_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
type |
query | нет | string |
form | true | Фильтр по type с точным совпадением. Этот фильтр также можно передать как filter[type], если это поддерживает Laravel query adapter. |
"inbound" |
|
aggregate_type |
query | нет | string |
form | true | Фильтр по aggregate_type с точным совпадением. Этот фильтр также можно передать как filter[aggregate_type], если это поддерживает Laravel query adapter. |
"case" |
|
command_id |
query | нет | string |
form | true | Фильтр по command_id с точным совпадением. Этот фильтр также можно передать как filter[command_id], если это поддерживает Laravel query adapter. |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|
occurred_at_from |
query | нет | string:date |
form | true | Нижняя включительная граница даты для occurred_at. Этот фильтр также можно передать как filter[occurred_at_from], если это поддерживает Laravel query adapter. |
"2026-07-14" |
|
occurred_at_to |
query | нет | string:date |
form | true | Верхняя включительная граница даты для occurred_at. Этот фильтр также можно передать как filter[occurred_at_to], если это поддерживает Laravel query adapter. |
"2026-07-14" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockEvent> |
|
|||
data[] |
нет | CrossDockEvent |
Append-only cross-dock audit event. | |
||
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[].event_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].aggregate_type |
да | string |
"case" |
|||
data[].aggregate_id |
да | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].aggregate_version |
да | integer:int64 |
4 |
|||
data[].type |
да | string |
"crossdock.case.released" |
|||
data[].actor_id |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].source |
да | string |
"api" |
|||
data[].command_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data[].correlation_id |
нет | string:uuid | null |
"4d9d6b9b-9c6d-4d2f-8c80-8f9a4d8b4f01" |
|||
data[].payload |
нет | object |
|
|||
data[].occurred_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].recorded_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 1001,
"event_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"case_id": 4101,
"aggregate_type": "case",
"aggregate_id": "01J2CROSSDOCKCASE000000001",
"aggregate_version": 4,
"type": "crossdock.case.released",
"source": "api"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/events",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить исключения cross-dock
| operationId | crossDockListExceptions |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock exceptions in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/exceptions" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at, resolved_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
type |
query | нет | string |
form | true | Фильтр по type с точным совпадением. Этот фильтр также можно передать как filter[type], если это поддерживает Laravel query adapter. |
"inbound" |
|
severity |
query | нет | string |
form | true | Фильтр по severity с точным совпадением. Этот фильтр также можно передать как filter[severity], если это поддерживает Laravel query adapter. |
"blocking" |
|
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
task_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по task_id с точным совпадением. Этот фильтр также можно передать как filter[task_id], если это поддерживает Laravel query adapter. |
1 |
supply_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по supply_id с точным совпадением. Этот фильтр также можно передать как filter[supply_id], если это поддерживает Laravel query adapter. |
1 |
demand_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по demand_id с точным совпадением. Этот фильтр также можно передать как filter[demand_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockException> |
|
|||
data[] |
нет | CrossDockException |
Operational discrepancy with explicit resolution history. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKEXCEPTION001" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].supply_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].demand_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].fulfillment_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].handling_unit_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].task_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].type |
да | string |
"shortage" |
|||
data[].severity |
да | enum |
enum: warning, blocking | "blocking" |
||
data[].status |
да | string |
"open" |
|||
data[].expected |
нет | object | null |
|
|||
data[].actual |
нет | object | null |
|
|||
data[].resolution_policy |
нет | string | null |
"fallback" |
|||
data[].resolution_decision |
нет | string | null |
"fallback_storage" |
|||
data[].reason |
нет | string | null |
"Two units missing" |
|||
data[].movement_group_id |
нет | string | null |
"XD-MOVE-4101-2" |
|||
data[].opened_by |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].resolved_by |
нет | integer:int64 | null |
min: 1 | 26 |
||
data[].resolved_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKEXCEPTION001",
"case_id": 4101,
"type": "shortage",
"severity": "blocking",
"status": "open",
"version": 1
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/exceptions",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Открыть исключение cross-dock
| operationId | crossDockOpenException |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Open cross-dock exception in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/exceptions" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockOpenExceptionRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.type |
да | enum |
enum: shortage, overage, damaged, sku_mismatch, lot_mismatch, expired, unknown_hu, wrong_target, capacity, timeout, cancelled_demand, transport_delay | "shortage" |
||
data.severity |
нет | enum |
enum: warning, blocking | "blocking" |
||
data.allocation_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.supply_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.demand_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.fulfillment_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.handling_unit_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.task_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.expected |
нет | object | null |
|
|||
data.actual |
нет | object | null |
|
|||
data.resolution_policy |
нет | string | null |
maxLength: 50 | "fallback" |
||
data.reason |
нет | string | null |
maxLength: 5000 | "Two units missing" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"type": "shortage",
"severity": "blocking"
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Выполнить fallback cross-dock через alias
| operationId | crossDockExecuteFallbackByAlias |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Совместимый alias команды fallback; в новых клиентах используйте /fallbacks.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallback" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockFallbackRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.supply_id |
да | integer:int64 |
min: 1 | 4201 |
||
data.exception_id |
нет | integer:int64 | null |
min: 1 | 4951 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.base_quantity |
да | number:float |
min: 0.0001 | 2 |
||
data.source_place_id |
нет | integer:int64 | null |
min: 1 | 800 |
||
data.target_place_id |
да | integer:int64 |
min: 1 | 950 |
||
data.route |
да | enum |
enum: storage, quarantine | "quarantine" |
||
data.source_barcode |
нет | string | null |
maxLength: 190 | "4601234567890" |
||
data.reason |
нет | string | null |
maxLength: 5000 | "Damaged package" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"supply_id": 4201,
"product_id": 1201,
"base_quantity": 2,
"target_place_id": 950,
"route": "quarantine"
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить компенсирующие маршруты cross-dock
| operationId | crossDockListFallbacks |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock fallbacks in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallbacks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
supply_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по supply_id с точным совпадением. Этот фильтр также можно передать как filter[supply_id], если это поддерживает Laravel query adapter. |
1 |
exception_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по exception_id с точным совпадением. Этот фильтр также можно передать как filter[exception_id], если это поддерживает Laravel query adapter. |
1 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
route |
query | нет | string |
form | true | Фильтр по route с точным совпадением. Этот фильтр также можно передать как filter[route], если это поддерживает Laravel query adapter. |
"quarantine" |
|
state |
query | нет | string |
form | true | Фильтр по state с точным совпадением. Этот фильтр также можно передать как filter[state], если это поддерживает Laravel query adapter. |
"ready" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockFallback> |
|
|||
data[] |
нет | CrossDockFallback |
Compensating route from cross-dock flow to storage or quarantine. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKFALLBACK0001" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].supply_id |
да | integer:int64 |
min: 1 | 4201 |
||
data[].exception_id |
нет | integer:int64 | null |
min: 1 | 4951 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
да | number:float |
2 |
|||
data[].base_quantity |
да | number:float |
2 |
|||
data[].source_place_id |
нет | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
да | integer:int64 |
min: 1 | 950 |
||
data[].route |
да | enum |
enum: storage, quarantine | "quarantine" |
||
data[].acceptance_offer_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].warehouse_item_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].state |
да | string |
"completed" |
|||
data[].reason |
нет | string | null |
"Damaged package" |
|||
data[].movement_group_id |
нет | string | null |
"XD-FALLBACK-4101-1" |
|||
data[].created_by |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].version |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKFALLBACK0001",
"case_id": 4101,
"supply_id": 4201,
"product_id": 1201,
"base_product_id": 1201,
"quantity": 2,
"base_quantity": 2,
"target_place_id": 950,
"route": "quarantine",
"state": "completed",
"version": 1
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fallbacks",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Выполнить fallback cross-dock
| operationId | crossDockExecuteFallback |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Перемещает выбранное количество в хранение или карантин, сохраняя lineage источника и разрешая связанное исключение.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallbacks" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockFallbackRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.supply_id |
да | integer:int64 |
min: 1 | 4201 |
||
data.exception_id |
нет | integer:int64 | null |
min: 1 | 4951 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.base_quantity |
да | number:float |
min: 0.0001 | 2 |
||
data.source_place_id |
нет | integer:int64 | null |
min: 1 | 800 |
||
data.target_place_id |
да | integer:int64 |
min: 1 | 950 |
||
data.route |
да | enum |
enum: storage, quarantine | "quarantine" |
||
data.source_barcode |
нет | string | null |
maxLength: 190 | "4601234567890" |
||
data.reason |
нет | string | null |
maxLength: 5000 | "Damaged package" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"supply_id": 4201,
"product_id": 1201,
"base_quantity": 2,
"target_place_id": 950,
"route": "quarantine"
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить исполненные фрагменты cross-dock
| operationId | crossDockListFulfillments |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock fulfillments in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fulfillments" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
state |
query | нет | string |
form | true | Фильтр по state с точным совпадением. Этот фильтр также можно передать как filter[state], если это поддерживает Laravel query adapter. |
"ready" |
|
allocation_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по allocation_id с точным совпадением. Этот фильтр также можно передать как filter[allocation_id], если это поддерживает Laravel query adapter. |
1 |
supply_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по supply_id с точным совпадением. Этот фильтр также можно передать как filter[supply_id], если это поддерживает Laravel query adapter. |
1 |
demand_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по demand_id с точным совпадением. Этот фильтр также можно передать как filter[demand_id], если это поддерживает Laravel query adapter. |
1 |
target_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по target_id с точным совпадением. Этот фильтр также можно передать как filter[target_id], если это поддерживает Laravel query adapter. |
1 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockFulfillment> |
|
|||
data[] |
нет | CrossDockFulfillment |
Physically confirmed cross-dock fragment with exact product and quant lineage. | |
||
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[].fragment_uuid |
да | string:uuid |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
да | integer:int64 |
min: 1 | 4501 |
||
data[].supply_id |
да | integer:int64 |
min: 1 | 4201 |
||
data[].demand_id |
да | integer:int64 |
min: 1 | 4251 |
||
data[].target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data[].handling_unit_id |
нет | integer:int64 | null |
min: 1 | 4601 |
||
data[].container_place_id |
нет | integer:int64 | null |
min: 1 | 901 |
||
data[].source_warehouse_item_id |
нет | integer:int64 | null |
min: 1 | 4701 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
да | number:float |
2 |
|||
data[].base_quantity |
да | number:float |
2 |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-07-14" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].state |
да | string |
"routed" |
|||
data[].source_place_id |
нет | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
нет | integer:int64 | null |
min: 1 | 900 |
||
data[].movement_group_id |
нет | string | null |
"XD-MOVE-4101-1" |
|||
data[].version |
да | integer:int64 |
1 |
|||
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": 1001,
"fragment_uuid": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4",
"case_id": 4101,
"allocation_id": 4501,
"supply_id": 4201,
"demand_id": 4251,
"target_id": 4301,
"product_id": 1201,
"base_product_id": 1201,
"quantity": 2,
"base_quantity": 2,
"state": "routed",
"version": 1
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/fulfillments",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить этикетки направлений cross-dock
| operationId | crossDockListTargetLabels |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock target labels in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/labels" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
target_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по target_id с точным совпадением. Этот фильтр также можно передать как filter[target_id], если это поддерживает Laravel query adapter. |
1 |
version |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по version с точным совпадением. Этот фильтр также можно передать как filter[version], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockTargetLabel> |
|
|||
data[] |
нет | CrossDockTargetLabel |
Versioned, signed target barcode; only the current ready label can confirm a target. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKLABEL0000001" |
|||
data[].target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data[].version |
да | integer:int64 |
2 |
|||
data[].barcode |
да | string |
"XD1.4301.2.signature" |
|||
data[].template_version |
да | string |
"crossdock-target-v1" |
|||
data[].artifact_ref |
нет | string | null |
"crossdock/labels/4401.pdf" |
|||
data[].artifact_hash |
нет | string | null |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
|||
data[].status |
да | string |
"ready" |
|||
data[].reprint_count |
нет | integer:int64 |
0 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKLABEL0000001",
"target_id": 4301,
"version": 2,
"barcode": "XD1.4301.2.signature",
"template_version": "crossdock-target-v1",
"status": "ready",
"reprint_count": 0
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/labels",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Создать задания печати cross-dock
| operationId | crossDockCreatePrintJobs |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Create cross-dock print jobs in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/labels/print-jobs" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCreatePrintJobsRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 5 |
||
data.label_ids |
нет | array<integer:int64> |
minItems: 1 | |
||
data.label_ids[] |
нет | integer:int64 |
min: 1 | 4401 |
||
data.printer_id |
нет | integer:int64 | null |
min: 1 | 55 |
||
data.device_id |
нет | string | null |
maxLength: 190 | "gate-printer-1" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить связи кейса с визитами погрузки
| operationId | crossDockListCaseLoadingVisitAssociations |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List case loading-visit associations in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
loading_visit_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по loading_visit_id с точным совпадением. Этот фильтр также можно передать как filter[loading_visit_id], если это поддерживает Laravel query adapter. |
1 |
document_type |
query | нет | string |
form | true | Фильтр по document_type с точным совпадением. Этот фильтр также можно передать как filter[document_type], если это поддерживает Laravel query adapter. |
"acceptance" |
|
document_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по document_id с точным совпадением. Этот фильтр также можно передать как filter[document_id], если это поддерживает Laravel query adapter. |
5101 |
role |
query | нет | string |
form | true | Фильтр по role с точным совпадением. Этот фильтр также можно передать как filter[role], если это поддерживает Laravel query adapter. |
"outbound" |
|
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockLoadingAssociation> |
|
|||
data[] |
нет | CrossDockLoadingAssociation |
Association between a cross-dock document and a loading visit. | |
||
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[].case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data[].loading_visit_id |
да | integer:int64 |
min: 1 | 6101 |
||
data[].document_type |
да | string |
"order" |
|||
data[].document_id |
да | integer:int64 |
min: 1 | 8101 |
||
data[].role |
да | string |
"outbound" |
|||
data[].status |
да | string |
"attached" |
|||
data[].created_by |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].detached_by |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].detached_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].visit |
нет | object | null |
|
|||
data[].visit.id |
да | integer:int64 |
min: 1 | 6101 |
||
data[].visit.type |
да | string |
"outbound" |
|||
data[].visit.status |
да | string |
"approved" |
|||
data[].visit.physical_warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].visit.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].visit.planned_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 1001,
"loading_visit_id": 6101,
"document_type": "order",
"document_id": 8101,
"role": "outbound",
"status": "attached"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/loading-visits",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Привязать визит погрузки к cross-dock-кейсу
| operationId | crossDockAttachLoadingVisitToCase |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Attach loading visit to cross-dock case in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/attach" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockLoadingVisitLinkRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 5 |
||
data.loading_visit_id |
да | integer:int64 |
min: 1 | 6101 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5,
"loading_visit_id": 6101
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Отвязать визит погрузки от cross-dock-кейса
| operationId | crossDockDetachLoadingVisitFromCase |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Detach loading visit from cross-dock case in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/detach" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockLoadingVisitLinkRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 5 |
||
data.loading_visit_id |
да | integer:int64 |
min: 1 | 6101 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5,
"loading_visit_id": 6101
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Привязать визит погрузки по ID в пути
| operationId | crossDockAttachLoadingVisitByPathId |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Attach loading visit by path ID in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/1001/attach" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
visit |
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" |
Тело запроса
CrossDockLoadingVisitPathLinkRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 5 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Отвязать визит погрузки по ID в пути
| operationId | crossDockDetachLoadingVisitByPathId |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Detach loading visit by path ID in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits/1001/detach" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
visit |
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" |
Тело запроса
CrossDockLoadingVisitPathLinkRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 5 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Подтвердить погрузочный скан cross-dock
| operationId | crossDockConfirmLoadingScan |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Подтверждает погрузку актуальной этикетки направления заказа в связанную исходящую заявку.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading/scans" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockLoadingScanRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.loading_visit_id |
да | integer:int64 |
min: 1 | 6101 |
||
data.order_id |
да | integer:int64 |
min: 1 | 8101 |
||
data.label_barcode |
да | string |
maxLength: 100 | "XD1.4301.2.signature" |
||
data.device_id |
нет | string | null |
maxLength: 190 | "gate-tsd-01" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"loading_visit_id": 6101,
"order_id": 8101,
"label_barcode": "XD1.4301.2.signature"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Заменить манифест грузовых единиц cross-dock
| operationId | crossDockReplaceHandlingUnitManifest |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Атомарно заменяет объявленный манифест SSCC/квантов и проверяет принадлежность штрихкодов и состав.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/manifest" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockReplaceManifestRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 3 |
||
data.handling_units |
да | array<object> |
|
|||
data.handling_units[] |
нет | object |
|
|||
data.handling_units[].barcode_kind |
да | enum |
enum: sscc, quant | "sscc" |
||
data.handling_units[].barcode |
да | string |
maxLength: 190 | "046012345678901234" |
||
data.handling_units[].hu_type |
нет | enum | null |
enum: box, pallet, tote | "box" |
||
data.handling_units[].contents |
да | array<object> |
minItems: 1 | |
||
data.handling_units[].contents[] |
нет | object |
|
|||
data.handling_units[].contents[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.handling_units[].contents[].quantity |
да | number:float |
min: 0.0001 | 4 |
||
data.handling_units[].contents[].batch |
нет | string | null |
maxLength: 100 | "LOT-2026" |
||
data.handling_units[].contents[].production_date |
нет | string:date | null |
"2026-07-14" |
|||
data.handling_units[].contents[].expiration_date |
нет | string:date | null |
"2027-01-15" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"handling_units": [
{
"barcode_kind": "sscc",
"barcode": "046012345678901234",
"contents": [
{
"product_id": 1201,
"quantity": 4
}
]
}
]
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить заказы cross-dock-кейса
| operationId | crossDockListOrders |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock orders in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/orders" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | нет | integer:int64 |
form | true | min: 1 | Номер страницы. Этот фильтр также можно передать как filter[page], если это поддерживает Laravel query adapter. |
1 |
per_page |
query | нет | integer:int64 |
form | true | min: 1 max: 250 |
Количество записей на странице. По умолчанию 50; максимум 250. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
50 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, send_date, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по status_id с точным совпадением. Этот фильтр также можно передать как filter[status_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
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"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/orders",
"per_page": 50,
"to": 50,
"total": 73
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Создать cross-dock-заказ и направление
| operationId | crossDockCreateOrderAndTarget |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Создаёт исходящий заказ в неизменяемом режиме исполнения cross-dock вместе с направлением и строками потребности.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCreateOrderRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.external_id |
нет | string | null |
maxLength: 50 | "ORD-XD-001" |
||
data.type_id |
да | integer:int64 |
min: 1 | 1 |
||
data.group_id |
нет | oneOf<string | integer> |
|
|||
data.group_id |
нет | string |
maxLength: 255 | "2ФИС" |
||
data.group_id |
нет | integer |
Legacy numeric identifiers are also accepted. | |
||
data.shop_id |
нет | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
нет | integer:int64 | null |
min: 1 | 43 |
||
data.send_date |
нет | string:date | null |
"2026-07-14" |
|||
data.source_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.customer_type |
нет | integer:int64 | null |
|
|||
data.company_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.is_cod |
нет | boolean |
false |
|||
data.shipping_price |
нет | number:float | null |
7.5 |
|||
data.shipping_cost |
нет | number:float | null |
5.0 |
|||
data.crossdock_target |
нет | object |
|
|||
data.crossdock_target.type |
нет | enum | null |
enum: order, route, staging_lane, dispatch | "order" |
||
data.crossdock_target.name |
нет | string | null |
maxLength: 190 | "Lane 7" |
||
data.crossdock_target.destination_ref |
нет | string | null |
maxLength: 190 | "SOF" |
||
data.crossdock_target.carrier_ref |
нет | string | null |
maxLength: 190 | "CDEK" |
||
data.crossdock_target.route_code |
нет | string | null |
maxLength: 190 | "BG-SOF" |
||
data.crossdock_target.place_id |
нет | integer:int64 | null |
min: 1 | 900 |
||
data.crossdock_target.priority |
нет | integer:int64 | null |
100 |
|||
data.crossdock_target.cutoff_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.lines |
да | array<object> |
minItems: 1 | |
||
data.lines[] |
нет | object |
|
|||
data.lines[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data.lines[].product_external_id |
нет | string | null |
maxLength: 190 | "EXT-10045" |
||
data.lines[].quantity |
да | number:float |
min: 0.0001 | 4 |
||
data.lines[].estimated_price |
нет | number:float | null |
min: 0 | 19.99 |
||
data.lines[].price |
нет | number:float | null |
min: 0 | 19.99 |
||
data.lines[].production_date |
нет | string:date | null |
"2026-07-14" |
|||
data.lines[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data.lines[].batch |
нет | string | null |
maxLength: 15 | "LOT-2026" |
||
data.lines[].source_policy |
нет | enum | null |
enum: crossdock_only, crossdock_then_stock, stock_allowed | "crossdock_only" |
||
data.lines[].external_line_id |
нет | string | null |
maxLength: 190 | "LINE-1" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"type_id": 1,
"is_cod": false,
"lines": [
{
"quantity": 4
}
]
}
}
Ответы
201 Created.
Created.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Рассчитать распределение cross-dock
| operationId | crossDockPlanAllocation |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Рассчитывает прямое распределение доступного supply по заказам с учётом FIFO срока годности, приоритета и версии стратегии.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/plan" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockPlanRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 3 |
||
data.strategy_version |
да | string |
maxLength: 50 | "fifo-v1" |
||
data.expected_plan_hash |
нет | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"strategy_version": "fifo-v1"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить задания печати cross-dock
| operationId | crossDockListPrintJobs |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock print jobs in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/print-jobs" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at, dispatched_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
label_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по label_id с точным совпадением. Этот фильтр также можно передать как filter[label_id], если это поддерживает Laravel query adapter. |
1 |
target_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по target_id с точным совпадением. Этот фильтр также можно передать как filter[target_id], если это поддерживает Laravel query adapter. |
1 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
printer_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по printer_id с точным совпадением. Этот фильтр также можно передать как filter[printer_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockPrintJob> |
|
|||
data[] |
нет | CrossDockPrintJob |
Versioned target-label print job with dispatch and device acknowledgement. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKPRINTJOB001" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data[].label_id |
да | integer:int64 |
min: 1 | 4401 |
||
data[].status |
да | string |
"ready" |
|||
data[].attempts |
да | integer:int64 |
0 |
|||
data[].printer_id |
нет | integer:int64 | null |
min: 1 | 55 |
||
data[].device_id |
нет | string | null |
"gate-printer-1" |
|||
data[].artifact_ref |
нет | string | null |
"crossdock/labels/4401.pdf" |
|||
data[].artifact_hash |
нет | string | null |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
|||
data[].last_error |
нет | string | null |
"printer_offline" |
|||
data[].dispatched_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].acknowledged_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
да | integer:int64 |
1 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKPRINTJOB001",
"case_id": 4101,
"target_id": 4301,
"label_id": 4401,
"status": "ready",
"attempts": 0,
"version": 1
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/print-jobs",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Get crossdock
| operationId | listCrossdockCasesReadiness |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Get crossdock in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/readiness" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Выпустить план cross-dock в работу
| operationId | crossDockReleasePlan |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Фиксирует hash плана, активирует allocations и targets, создаёт исполняемые задания и актуальные этикетки.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/release" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockReleaseRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 4 |
||
data.plan_hash |
да | string |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 4,
"plan_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Run crossdock action
| operationId | createCrossdockCasesReturnToDraft |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Run crossdock action in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/return-to-draft" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCommandRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version. |
|
||
data.command_id |
нет | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.barcode |
нет | string | null |
"4601234567890" |
|||
data.quantity |
нет | number:float | null |
min: 0 | 5 |
||
data.reason |
нет | string | null |
"Supervisor-approved operational action" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Get crossdock
| operationId | listCrossdockCasesScanSessions |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Get crossdock in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scan-sessions" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Отсканировать источник cross-dock
| operationId | crossDockScanSource |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Распознаёт товар, квант или SSCC в исходном месте и открывает версионируемую сессию устройства с временным hold остатка.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scans/source" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockSourceScanRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.barcode |
да | string |
maxLength: 190 | "4601234567890" |
||
data.device_id |
да | string |
maxLength: 190 | "tsd-01" |
||
data.source_place_id |
да | integer:int64 |
min: 1 | 800 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"barcode": "4601234567890",
"device_id": "tsd-01",
"source_place_id": 800
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Подтвердить скан направления cross-dock
| operationId | crossDockConfirmTargetScan |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Проверяет актуальную этикетку направления, фиксирует fulfillment и движения, погашает hold и продвигает связанный заказ.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scans/target" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockTargetScanRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.scan_session_id |
да | string |
maxLength: 190 | "01J2CROSSDOCKSESSION000001" |
||
data.version |
да | integer:int64 |
min: 1 | 2 |
||
data.target_barcode |
да | string |
maxLength: 255 | "XD1.4301.2.signature" |
||
data.device_id |
да | string |
maxLength: 190 | "tsd-01" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"scan_session_id": "01J2CROSSDOCKSESSION000001",
"version": 2,
"target_barcode": "XD1.4301.2.signature",
"device_id": "tsd-01"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Run crossdock action
| operationId | createCrossdockCasesSubmit |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Run crossdock action in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/submit" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCommandRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version. |
|
||
data.command_id |
нет | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.barcode |
нет | string | null |
"4601234567890" |
|||
data.quantity |
нет | number:float | null |
min: 0 | 5 |
||
data.reason |
нет | string | null |
"Supervisor-approved operational action" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить входящие количества cross-dock
| operationId | crossDockListSupplies |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock supplies in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/supplies" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, product_id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по product_id с точным совпадением. Этот фильтр также можно передать как filter[product_id], если это поддерживает Laravel query adapter. |
1201 |
base_product_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по base_product_id с точным совпадением. Этот фильтр также можно передать как filter[base_product_id], если это поддерживает Laravel query adapter. |
1200 |
acceptance_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по acceptance_id с точным совпадением. Этот фильтр также можно передать как filter[acceptance_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockSupply> |
|
|||
data[] |
нет | CrossDockSupply |
Inbound quantity available to the cross-dock planner. | |
||
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[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].acceptance_id |
да | integer:int64 |
min: 1 | 5101 |
||
data[].acceptance_line_id |
да | integer:int64 |
min: 1 | 5201 |
||
data[].lineage_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].parent_supply_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
да | number:float |
10 |
|||
data[].base_quantity |
да | number:float |
10 |
|||
data[].received_quantity |
нет | number:float |
10 |
|||
data[].received_base_quantity |
нет | number:float |
10 |
|||
data[].eligible_base_quantity |
нет | number:float |
10 |
|||
data[].allocated_base_quantity |
нет | number:float |
8 |
|||
data[].executed_base_quantity |
нет | number:float |
5 |
|||
data[].batch |
нет | string | null |
"LOT-2026" |
|||
data[].production_date |
нет | string:date | null |
"2026-07-14" |
|||
data[].expiration_date |
нет | string:date | null |
"2027-01-15" |
|||
data[].quality_state |
нет | string |
"accepted" |
|||
data[].external_line_id |
нет | string | null |
"ASN-LINE-1" |
|||
data[].version |
да | integer:int64 |
2 |
|||
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": 1001,
"case_id": 4101,
"acceptance_id": 5101,
"acceptance_line_id": 5201,
"lineage_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"product_id": 1201,
"base_product_id": 1201,
"quantity": 10,
"base_quantity": 10,
"received_quantity": 10,
"received_base_quantity": 10,
"eligible_base_quantity": 10,
"allocated_base_quantity": 8,
"executed_base_quantity": 5,
"quality_state": "accepted",
"version": 2
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/supplies",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить направления cross-dock
| operationId | crossDockListTargets |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock targets in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/targets" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, short_number, created_at. По умолчанию: short_number. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"short_number" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
order_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по order_id с точным совпадением. Этот фильтр также можно передать как filter[order_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockTarget> |
|
|||
data[] |
нет | CrossDockTarget |
Physical sorting or dispatch destination for a cross-dock order. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKTARGET000001" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].order_id |
нет | integer:int64 | null |
min: 1 | 8101 |
||
data[].type |
да | enum |
enum: order, route, staging_lane, dispatch | "order" |
||
data[].short_number |
да | integer:int64 |
7 |
|||
data[].name |
нет | string | null |
"Lane 7" |
|||
data[].destination_ref |
нет | string | null |
"SOF" |
|||
data[].carrier_ref |
нет | string | null |
"CDEK" |
|||
data[].route_ref |
нет | string | null |
"BG-SOF" |
|||
data[].place_id |
нет | integer:int64 | null |
min: 1 | 900 |
||
data[].barcode_token_version |
нет | integer:int64 |
2 |
|||
data[].current_label_id |
нет | integer:int64 | null |
min: 1 | 4401 |
||
data[].status |
да | string |
"ready" |
|||
data[].version |
да | integer:int64 |
3 |
|||
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": 1001,
"public_id": "01J2CROSSDOCKTARGET000001",
"case_id": 4101,
"type": "order",
"short_number": 7,
"barcode_token_version": 2,
"status": "ready",
"version": 3
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/targets",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Назначить места направлениям cross-dock
| operationId | crossDockAssignTargetPlaces |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Assign cross-dock target places in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/targets/places" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockAssignTargetPlacesRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 3 |
||
data.targets |
да | array<object> |
minItems: 1 maxItems: 500 |
|
||
data.targets[] |
нет | object |
|
|||
data.targets[].target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data.targets[].target_version |
да | integer:int64 |
min: 1 | 2 |
||
data.targets[].target_place_id |
да | integer:int64 |
min: 1 | 900 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"targets": [
{
"target_id": 4301,
"target_version": 2,
"target_place_id": 900
}
]
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить задания cross-dock
| operationId | crossDockListTasks |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock tasks in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/tasks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
case |
path | да | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id, created_at. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по id с точным совпадением. Этот фильтр также можно передать как filter[id], если это поддерживает Laravel query adapter. |
1001 |
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
|
type |
query | нет | string |
form | true | Фильтр по type с точным совпадением. Этот фильтр также можно передать как filter[type], если это поддерживает Laravel query adapter. |
"inbound" |
|
target_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по target_id с точным совпадением. Этот фильтр также можно передать как filter[target_id], если это поддерживает Laravel query adapter. |
1 |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockTask> |
|
|||
data[] |
нет | CrossDockTask |
Executable cross-dock warehouse task. | |
||
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[].public_id |
да | string |
"01J2CROSSDOCKTASK0000001" |
|||
data[].case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
нет | integer:int64 | null |
min: 1 | 4501 |
||
data[].fulfillment_id |
нет | integer:int64 | null |
min: 1 | 4801 |
||
data[].target_id |
нет | integer:int64 | null |
min: 1 | 4301 |
||
data[].type |
да | string |
"move" |
|||
data[].source_place_id |
нет | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
нет | integer:int64 | null |
min: 1 | 900 |
||
data[].product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_product_id |
нет | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_quantity |
нет | number:float | null |
4 |
|||
data[].status |
да | string |
"ready" |
|||
data[].lease_owner_id |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].lease_until |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].active_scan_session_id |
нет | integer:int64 | null |
min: 1 | 4901 |
||
data[].version |
да | integer:int64 |
1 |
|||
data[].completed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 1001,
"public_id": "01J2CROSSDOCKTASK0000001",
"case_id": 4101,
"type": "move",
"status": "ready",
"version": 1
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/cases/4101/tasks",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить статус команды cross-dock
| operationId | crossDockGetCommandStatus |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Возвращает сохранённое состояние идемпотентной команды и исходный результат для восстановления после таймаута.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/commands/4fe557e8-70f7-4b36-a124-d3afad4041d4" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
commandId |
path | да | string:uuid |
Idempotent cross-dock command UUID. | "4fe557e8-70f7-4b36-a124-d3afad4041d4" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Разрешить исключение cross-dock
| operationId | crossDockResolveException |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Resolve cross-dock exception in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/exceptions/1001/resolve" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
exception |
path | да | integer:int64 |
min: 1 | Cross-dock exception ID. | 1001 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockResolveExceptionRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 1 |
||
data.decision |
да | enum |
enum: resume, fallback_completed, manual_accept | "resume" |
||
data.reason |
нет | string | null |
maxLength: 5000 | "Supervisor approved" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"decision": "resume"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить cross-dock-документы визита погрузки
| operationId | crossDockListDocumentsForLoadingVisit |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
List cross-dock documents for loading visit in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
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.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/loading-visits/1001/documents" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
visit |
path | да | integer:int64 |
min: 1 | ID визита погрузки. | 1001 |
||
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 |
Количество записей на странице. По умолчанию 100; максимум 500. Этот фильтр также можно передать как filter[per_page], если это поддерживает Laravel query adapter. |
100 |
sort |
query | нет | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Поля сортировки через запятую. Префикс - означает сортировку по убыванию. Допустимые поля: id. По умолчанию: id. Этот фильтр также можно передать как filter[sort], если это поддерживает Laravel query adapter. |
"id" |
document_type |
query | нет | string |
form | true | Фильтр по document_type с точным совпадением. Этот фильтр также можно передать как filter[document_type], если это поддерживает Laravel query adapter. |
"acceptance" |
|
document_id |
query | нет | integer:int64 |
form | true | min: 1 | Фильтр по document_id с точным совпадением. Этот фильтр также можно передать как filter[document_id], если это поддерживает Laravel query adapter. |
5101 |
role |
query | нет | string |
form | true | Фильтр по role с точным совпадением. Этот фильтр также можно передать как filter[role], если это поддерживает Laravel query adapter. |
"outbound" |
|
status |
query | нет | string |
form | true | Фильтр по status с точным совпадением. Этот фильтр также можно передать как filter[status], если это поддерживает Laravel query adapter. |
"waiting" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | array<CrossDockLoadingAssociation> |
|
|||
data[] |
нет | CrossDockLoadingAssociation |
Association between a cross-dock document and a loading visit. | |
||
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[].case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data[].loading_visit_id |
да | integer:int64 |
min: 1 | 6101 |
||
data[].document_type |
да | string |
"order" |
|||
data[].document_id |
да | integer:int64 |
min: 1 | 8101 |
||
data[].role |
да | string |
"outbound" |
|||
data[].status |
да | string |
"attached" |
|||
data[].created_by |
нет | integer:int64 | null |
min: 1 | 25 |
||
data[].detached_by |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data[].detached_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].visit |
нет | object | null |
|
|||
data[].visit.id |
да | integer:int64 |
min: 1 | 6101 |
||
data[].visit.type |
да | string |
"outbound" |
|||
data[].visit.status |
да | string |
"approved" |
|||
data[].visit.physical_warehouse_id |
да | integer:int64 |
min: 1 | 42 |
||
data[].visit.gate_id |
нет | integer:int64 | null |
min: 1 | 3 |
||
data[].visit.planned_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 1001,
"loading_visit_id": 6101,
"document_type": "order",
"document_id": 8101,
"role": "outbound",
"status": "attached"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/crossdock/loading-visits/6101/documents",
"per_page": 100,
"to": 100,
"total": 123
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Подтвердить результат печати cross-dock
| operationId | crossDockAcknowledgePrintJob |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Acknowledge cross-dock print job in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/print-jobs/1001/acknowledge" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
job |
path | да | integer:int64 |
min: 1 | Cross-dock print job ID. | 1001 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockAcknowledgePrintJobRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 2 |
||
data.success |
да | boolean |
true |
|||
data.artifact_hash |
нет | string | null |
minLength: 64 maxLength: 64 |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
||
data.error |
нет | string | null |
maxLength: 5000 | "printer_offline" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 2,
"success": true
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Передать задание cross-dock на принтер
| operationId | crossDockDispatchPrintJob |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Dispatch cross-dock print job in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/print-jobs/1001/dispatch" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
job |
path | да | integer:int64 |
min: 1 | Cross-dock print job ID. | 1001 |
||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockDispatchPrintJobRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 1 |
||
data.printer_id |
нет | integer:int64 | null |
min: 1 | 55 |
||
data.device_id |
нет | string | null |
maxLength: 190 | "gate-printer-1" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Получить сессию сканирования cross-dock
| operationId | crossDockGetScanSession |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Get cross-dock scan session in the isolated cross-dock execution context.
Результат ограничен tenant-областью аутентифицированного пользователя API v2. Для коллекций поддерживаются описанные фильтры, сортировка и пагинация.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Параметры
| Имя | Где | Обязательное | Тип | Style | Explode | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
session |
path | да | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
Тело запроса
Тело запроса отсутствует.
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockScanSession |
Device-bound source scan session waiting for quantity or target confirmation. | |
||
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.public_id |
да | string |
"01J2CROSSDOCKSESSION000001" |
|||
data.case_id |
да | integer:int64 |
min: 1 | 4101 |
||
data.task_id |
да | integer:int64 |
min: 1 | 4551 |
||
data.allocation_id |
да | integer:int64 |
min: 1 | 4501 |
||
data.target_id |
да | integer:int64 |
min: 1 | 4301 |
||
data.device_id |
да | string |
"tsd-01" |
|||
data.source_place_id |
да | integer:int64 |
min: 1 | 800 |
||
data.recognized_type |
да | enum |
enum: product, quant, sscc | "product" |
||
data.handling_unit_id |
нет | integer:int64 | null |
min: 1 | 1001 |
||
data.product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.base_product_id |
да | integer:int64 |
min: 1 | 1201 |
||
data.quantity_mode |
нет | string |
"manual" |
|||
data.scanned_base_quantity |
нет | number:float |
1 |
|||
data.confirmed_base_quantity |
нет | number:float |
4 |
|||
data.status |
да | string |
"awaiting_target" |
|||
data.version |
да | integer:int64 |
2 |
|||
data.expires_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.committed_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cancelled_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.next_action |
нет | string | null |
"scan_target" |
|||
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": 1001,
"public_id": "01J2CROSSDOCKSESSION000001",
"case_id": 4101,
"task_id": 4551,
"allocation_id": 4501,
"target_id": 4301,
"device_id": "tsd-01",
"source_place_id": 800,
"recognized_type": "product",
"product_id": 1201,
"base_product_id": 1201,
"quantity_mode": "manual",
"scanned_base_quantity": 1,
"confirmed_base_quantity": 4,
"status": "awaiting_target",
"version": 2
},
"meta": {
"api_version": "v2"
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Отменить сессию сканирования cross-dock
| operationId | crossDockCancelScanSession |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Cancel cross-dock scan session in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001/cancel" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
session |
path | да | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockCancelScanSessionRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 1 |
||
data.device_id |
да | string |
maxLength: 190 | "tsd-01" |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"device_id": "tsd-01"
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
Задать количество сессии cross-dock
| operationId | crossDockSetScanQuantity |
|---|---|
| Раздел | Кросс-докинг |
| Безопасность | bearerAuth |
Set cross-dock scan quantity in the isolated cross-dock execution context.
Передавайте envelope API v2 data и заголовок Idempotency-Key. Мутации идемпотентны по command_id; устаревшая version версионируемого агрегата возвращает 409.
Пример HTTP-запроса (cURL)
Подставьте свой сервер и токен. ID из примера замените реальными доступными ID. Для тела запроса сохраните подходящий JSON из раздела ниже в request.json; перед отправкой замените демонстрационные значения. Заголовок Idempotency-Key использует ключ одной логической операции.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001/quantity" \
--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 | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|---|---|
session |
path | да | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
|||
Idempotency-Key |
header | нет | string |
maxLength: 191 | Опциональный ключ идемпотентности для write-запросов API v2. Успешные ответы 2xx/3xx повторяются для того же ключа и идентичного payload в течение одного дня. Тот же ключ с другим payload возвращает 409. |
"ord-create-20260714-001" |
Тело запроса
CrossDockSetScanQuantityRequest обязательно
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | object |
|
|||
data.command_id |
да | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
да | integer:int64 |
min: 1 | 1 |
||
data.device_id |
да | string |
maxLength: 190 | "tsd-01" |
||
data.quantity |
да | integer:int64 |
min: 1 | 4 |
Примеры запроса
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"device_id": "tsd-01",
"quantity": 4
}
}
Ответы
200 Successful response.
Successful response.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
data |
да | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
нет | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
нет | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
нет | string | null |
"released" |
|||
data.state |
нет | string | null |
"open" |
|||
data.version |
нет | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
нет | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
нет | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
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": 4101,
"public_id": "01J2CROSSDOCKCASE000000001",
"status": "released",
"version": 3,
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"correlation_id": "a3fd7025-9284-4db6-9aaf-70845b9d6ad4"
},
"meta": {
"api_version": "v2"
}
}
400 Некорректный запрос
CrossDockBadRequest
Некорректный запрос.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Требуется аутентификация
CrossDockUnauthorized
Требуется аутентификация.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Доступ запрещен
CrossDockForbidden
Аутентифицированному аккаунту запрещено выполнять это действие.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "FORBIDDEN",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
404 Не найдено
CrossDockNotFound
Запрошенный ресурс не найден или находится вне области доступа аккаунта.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "NOT_FOUND",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
409 Конфликт
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
CROSSDOCK_VERSION_CONFLICT
{
"message": "The request conflicts with the current aggregate version or command state.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "CROSSDOCK_VERSION_CONFLICT",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
422 Ошибка валидации
CrossDockValidationError
The given data was invalid.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
VALIDATION_ERROR
{
"message": "The given data was invalid.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "VALIDATION_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
429 Превышен лимит запросов
CrossDockTooManyRequests
Превышен лимит запросов.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Внутренняя ошибка сервера
CrossDockInternalServerError
Произошла непредвиденная ошибка сервера.
| Поле | Обязательное | Тип | Флаги | Ограничения | Описание | Пример |
|---|---|---|---|---|---|---|
message |
да | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
да | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
да | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
да | enum |
enum: v2 | "v2" |
||
meta.error_code |
да | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
нет | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
нет | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Примеры ответа
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "INTERNAL_SERVER_ERROR",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}