Complete API v2 Reference
Every operation below is generated from the OpenAPI v2 specification and includes parameters, request fields, response fields, errors, and examples.
Acceptances
List acceptances
| operationId | listAcceptances |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Returns acceptances visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, acceptance_date, external_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
include |
query | no | string |
form | false | Comma-separated optional relations. Allowed values: offers. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"offers" |
|
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
external_id |
query | no | string |
form | true | Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. |
"EXT-10045" |
|
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
shop_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. |
12 |
type_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. |
1 |
user_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by user_id using exact matching. The same filter may also be sent as filter[user_id] where supported by the Laravel query adapter. |
15 |
document_barcode |
query | no | string |
form | true | Filter by document_barcode using partial text matching. The same filter may also be sent as filter[document_barcode] where supported by the Laravel query adapter. |
"ASN-100245-BARCODE" |
|
comment |
query | no | string |
form | true | Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. |
"Priority" |
|
acceptance_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for acceptance_date. The same filter may also be sent as filter[acceptance_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
acceptance_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for acceptance_date. The same filter may also be sent as filter[acceptance_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Acceptance> |
|
|||
data[] |
no | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"ASN-100245" |
|||
data[].document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data[].type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data[].comment |
no | string | null |
"Inbound from supplier" |
|||
data[].counts |
yes | AcceptanceCounts |
|
|||
data[].counts.expected |
yes | number:float |
10 |
|||
data[].counts.accepted |
yes | number:float |
0 |
|||
data[].counts.placed |
yes | number:float |
0 |
|||
data[].acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data[].offers |
no | array<AcceptanceLine> |
|
|||
data[].offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data[].offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].offers[].price |
no | number:float | null |
4.99 |
|||
data[].offers[].batch |
no | string | null |
"LOT-2026" |
|||
data[].offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data[].offers[].product |
no | object | null |
|
|||
data[].offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data[].offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data[].offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data[].offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data[].crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data[].crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data[].crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data[].crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data[].crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create standard, return, or cross-dock acceptance
| operationId | createAcceptances |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Creates one of the three visible acceptance types. type_id=1 creates a standard acceptance, type_id=2 creates a return acceptance, and type_id=3 enters the isolated cross-dock workflow.
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.
If cross-docking is disabled on the selected client warehouse, the request returns the API v2 validation envelope and leaves no partial acceptance. The response includes type_code=crossdock, crossdock_case, meta.crossdock_configuration, and meta.command_replayed.
The acceptance type is immutable. Continue the process through the Cross-docking operations: create orders/targets, plan, release, execute source and target scans, load, and close.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateAcceptanceRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateAcceptancePayload |
|
Request examples
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"
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data.type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.counts |
yes | AcceptanceCounts |
|
|||
data.counts.expected |
yes | number:float |
10 |
|||
data.counts.accepted |
yes | number:float |
0 |
|||
data.counts.placed |
yes | number:float |
0 |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.offers |
no | array<AcceptanceLine> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].price |
no | number:float | null |
4.99 |
|||
data.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data.crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
AcceptanceCreateBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | 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 |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
AcceptanceCreateConflict
The request conflicts with the current resource or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | 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 |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
AcceptanceCreateValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | 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 |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get acceptance
| operationId | getAcceptances |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Returns one acceptance when it exists and is visible to the authenticated account.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data.type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.counts |
yes | AcceptanceCounts |
|
|||
data.counts.expected |
yes | number:float |
10 |
|||
data.counts.accepted |
yes | number:float |
0 |
|||
data.counts.placed |
yes | number:float |
0 |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.offers |
no | array<AcceptanceLine> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].price |
no | number:float | null |
4.99 |
|||
data.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data.crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update acceptance
| operationId | replaceAcceptances |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Updates an editable acceptance header and may upsert or delete lines. Closed or already processed documents reject changes with validation or lifecycle errors.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceAcceptanceRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceAcceptancePayload |
Legacy PUT payload. Current backend applies partial-update semantics and may upsert or delete lines. | |
||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.allow_add_offers_during_acceptance |
no | boolean |
false |
|||
data.lines |
no | array<AcceptanceLineUpsertPayload> |
|
|||
data.lines[] |
no | AcceptanceLineUpsertPayload |
Acceptance line payload. The product is resolved by product_id or product_external_id. |
|
||
data.lines[] |
no | object |
|
|||
data.lines[] |
no | object |
|
|||
data.lines_delete |
no | array<integer:int64> |
|
|||
data.lines_delete[] |
no | integer:int64 |
min: 1 | 7101 |
Request examples
default
{
"data": {
"comment": "Updated supplier note",
"lines_delete": [
7102
]
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data.type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.counts |
yes | AcceptanceCounts |
|
|||
data.counts.expected |
yes | number:float |
10 |
|||
data.counts.accepted |
yes | number:float |
0 |
|||
data.counts.placed |
yes | number:float |
0 |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.offers |
no | array<AcceptanceLine> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].price |
no | number:float | null |
4.99 |
|||
data.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data.crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update acceptance
| operationId | patchAcceptances |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Partially updates an editable acceptance. Omitted fields are not changed.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchAcceptanceRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchAcceptancePayload |
Partial acceptance update payload. Omitted fields are unchanged. | |
||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.allow_add_offers_during_acceptance |
no | boolean |
false |
|||
data.lines |
no | array<AcceptanceLineUpsertPayload> |
|
|||
data.lines[] |
no | AcceptanceLineUpsertPayload |
Acceptance line payload. The product is resolved by product_id or product_external_id. |
|
||
data.lines[] |
no | object |
|
|||
data.lines[] |
no | object |
|
|||
data.lines_delete |
no | array<integer:int64> |
|
|||
data.lines_delete[] |
no | integer:int64 |
min: 1 | 7101 |
Request examples
default
{
"data": {
"comment": "Updated supplier note"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data.type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.counts |
yes | AcceptanceCounts |
|
|||
data.counts.expected |
yes | number:float |
10 |
|||
data.counts.accepted |
yes | number:float |
0 |
|||
data.counts.placed |
yes | number:float |
0 |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.offers |
no | array<AcceptanceLine> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].price |
no | number:float | null |
4.99 |
|||
data.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data.crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete acceptance
| operationId | deleteAcceptances |
|---|---|
| Tag | Acceptances |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Cancel acceptance
| operationId | cancelAcceptance |
|---|---|
| Tag | Acceptances |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Acceptance |
Inbound receiving document. Relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ASN-100245" |
|||
data.document_barcode |
no | string | null |
"ASN-100245-BARCODE" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 9 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - standard acceptance; 2 - return acceptance; 3 - cross-dock acceptance. The type is immutable after creation. |
1 |
|
data.type_code |
no | enum | null |
enum: acceptance, return, crossdock | "acceptance" |
||
data.comment |
no | string | null |
"Inbound from supplier" |
|||
data.counts |
yes | AcceptanceCounts |
|
|||
data.counts.expected |
yes | number:float |
10 |
|||
data.counts.accepted |
yes | number:float |
0 |
|||
data.counts.placed |
yes | number:float |
0 |
|||
data.acceptance_date |
no | string:date | null |
"2026-07-14" |
|||
data.offers |
no | array<AcceptanceLine> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.offers[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.offers[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.offers[].price |
no | number:float | null |
4.99 |
|||
data.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.offers[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data.offers[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.offers[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
data.crossdock_case |
no | object | null |
Cross-dock case created atomically with an acceptance of type 3. | |
||
data.crossdock_case.id |
yes | integer:int64 |
min: 1 | 1001 |
||
data.crossdock_case.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.crossdock_case.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "draft" |
||
data.crossdock_case.process_version |
yes | string |
"direct_order_v1" |
|||
data.crossdock_case.version |
yes | integer:int64 |
min: 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
List acceptances
| operationId | listAcceptancesLines |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Returns acceptances visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/acceptances/1001/lines" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, product_id, expected_quantity, price, expiration_date, created_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
barcode |
query | no | string |
form | true | Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. |
"4601234567890" |
|
batch |
query | no | string |
form | true | Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. |
"LOT-2026" |
|
expiration_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<AcceptanceLine> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].price |
no | number:float | null |
4.99 |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data[].product |
no | object | null |
|
|||
data[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create acceptance
| operationId | createAcceptancesLines |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Create acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AddAcceptanceLinesRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.lines |
yes | array<AcceptanceLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
no | AcceptanceLineCreatePayload |
Acceptance line payload. The product is resolved by product_id or product_external_id. |
|
||
data.lines[] |
no | object |
|
|||
data.lines[] |
no | object |
|
Request examples
default
{
"data": {
"lines": [
{
"product_external_id": "EXT-10045",
"expected_quantity": 10
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<AcceptanceLine> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].price |
no | number:float | null |
4.99 |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data[].product |
no | object | null |
|
|||
data[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update acceptance
| operationId | replaceAcceptancesLines |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceAcceptanceLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | AcceptanceLineReplacePayload |
Legacy PUT line update payload. Current backend treats PUT as partial update. | |
||
data.expected_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
Request examples
default
{
"data": {
"expected_quantity": 12,
"batch": "LOT-2026"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
no | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update acceptance
| operationId | patchAcceptancesLines |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchAcceptanceLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | AcceptanceLinePatchPayload |
Editable acceptance line fields. The line ID is taken from the path and must not be repeated in the body. | |
||
data.expected_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
Request examples
default
{
"data": {
"expected_quantity": 12
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
no | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete acceptance
| operationId | deleteAcceptancesLines |
|---|---|
| Tag | Acceptances |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create acceptance
| operationId | createAcceptancesOffers |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Create acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AddAcceptanceLinesRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.lines |
yes | array<AcceptanceLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
no | AcceptanceLineCreatePayload |
Acceptance line payload. The product is resolved by product_id or product_external_id. |
|
||
data.lines[] |
no | object |
|
|||
data.lines[] |
no | object |
|
Request examples
default
{
"data": {
"lines": [
{
"product_external_id": "EXT-10045",
"expected_quantity": 10
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<AcceptanceLine> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data[].accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data[].price |
no | number:float | null |
4.99 |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data[].product |
no | object | null |
|
|||
data[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].accepted_lots |
no | array<AcceptanceLot> |
|
|||
data[].accepted_lots[] |
no | AcceptanceLot |
|
|||
data[].accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data[].accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update acceptance
| operationId | replaceAcceptancesOffers |
|---|---|
| Tag | Acceptances |
| Security | bearerAuth |
Update acceptance. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceAcceptanceLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | AcceptanceLineReplacePayload |
Legacy PUT line update payload. Current backend treats PUT as partial update. | |
||
data.expected_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
Request examples
default
{
"data": {
"expected_quantity": 12,
"batch": "LOT-2026"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.expected_quantity |
yes | number:float |
min: 0 | 10 |
||
data.accepted_quantity |
yes | number:float |
min: 0 | 0 |
||
data.placed_quantity |
yes | number:float |
min: 0 | 0 |
||
data.price |
no | number:float | null |
4.99 |
|||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.barcode |
no | string | null |
maxLength: 64 | "4601234567890" |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.accepted_lots |
no | array<AcceptanceLot> |
|
|||
data.accepted_lots[] |
no | AcceptanceLot |
|
|||
data.accepted_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.accepted_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.accepted_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.accepted_lots[].accepted_quantity |
yes | number:float |
min: 0 | 5 |
||
data.accepted_lots[].placed_quantity |
yes | number:float |
min: 0 | 3 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete acceptance
| operationId | deleteAcceptancesOffers |
|---|---|
| Tag | Acceptances |
| Security | 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.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Acceptance ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Account
Get current user
| operationId | getCurrentUser |
|---|---|
| Tag | Account |
| Security | bearerAuth |
Returns one account when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/me" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
This operation has no path, query, or header parameters.
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | User |
Authenticated or visible NWMS user. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Client Manager" |
|||
data.email |
yes | string:email |
"client.manager@nwms.cloud" |
|||
data.language |
no | string | null |
"en" |
|||
data.storage_id |
no | string | null |
"default" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.data_scope |
no | string | null |
"domain" |
|||
data.roles |
no | array<string> |
|
|||
data.roles[] |
no | string |
"clients" |
|||
data.domain |
no | object | null |
|
|||
data.domain.id |
yes | integer:int64 |
min: 1 | 3 |
||
data.domain.name |
yes | string |
"Demo Domain" |
|||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Closed Boxes
List closed boxes currently in stock
| operationId | listClosedBoxes |
|---|---|
| Tag | Closed Boxes |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, sscc, warehouse_id, physical_warehouse_id, created_at, updated_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
public_id |
query | no | string |
form | true | Filter by public_id using exact matching. The same filter may also be sent as filter[public_id] where supported by the Laravel query adapter. |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|
sscc |
query | no | string |
form | true | Filter by sscc using exact matching. The same filter may also be sent as filter[sscc] where supported by the Laravel query adapter. |
"038123450000000013" |
|
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
physical_warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by physical_warehouse_id using exact matching. The same filter may also be sent as filter[physical_warehouse_id] where supported by the Laravel query adapter. |
41 |
package_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by package_product_id using exact matching. The same filter may also be sent as filter[package_product_id] where supported by the Laravel query adapter. |
1202 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
case_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by case_id using exact matching. The same filter may also be sent as filter[case_id] where supported by the Laravel query adapter. |
1 |
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<ClosedBox> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].sscc |
yes | string |
minLength: 18 maxLength: 18 pattern: ^\d{18}$ |
Unique normalized GS1 SSCC. Leading zeroes are preserved. | "038123450000000013" |
|
data[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 42 |
||
data[].warehouse_name |
yes | string | null |
"Client warehouse Sofia" |
|||
data[].physical_warehouse_id |
yes | integer:int64 |
min: 1 | 41 |
||
data[].physical_warehouse_name |
yes | string | null |
"FF warehouse Sofia" |
|||
data[].balance |
yes | 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 |
yes | enum |
enum: box | "box" |
||
data[].status |
yes | string |
"routed" |
|||
data[].seal_state |
yes | enum |
enum: sealed | "sealed" |
||
data[].box_type |
yes | string |
"box" |
|||
data[].barcode |
yes | string |
minLength: 1 maxLength: 190 |
"038123450000000013" |
||
data[].package_product_id |
yes | integer:int64 | null |
min: 1 | 1202 |
||
data[].package_product_name |
yes | string | null |
"Coffee box 12" |
|||
data[].container_place_id |
yes | integer:int64 | null |
min: 1 | 5501 |
||
data[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data[].place_barcode |
yes | string | null |
"SHELF-501" |
|||
data[].contents |
yes | array<ClosedBoxItem> |
|
|||
data[].contents[] |
no | ClosedBoxItem |
|
|||
data[].contents[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data[].contents[].product_name |
yes | string | null |
"Coffee box 12" |
|||
data[].contents[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].contents[].base_product_name |
yes | string | null |
"Coffee 250g" |
|||
data[].contents[].quantity |
yes | number:float |
min: 0 | Recorded quantity in product units. For a quant product this is the number of boxes. | 1 |
|
data[].contents[].base_quantity |
yes | number:float |
min: 0 | Recorded quantity converted to base product units. | 12 |
|
data[].contents[].current_quantity |
yes | number:float |
min: 0 | Current positive quantity in the warehouse ledger row linked to this box content. | 1 |
|
data[].contents[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].contents[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].contents[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get one closed box
| operationId | getClosedBox |
|---|---|
| Tag | Closed Boxes |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/closed-boxes/038123450000000013" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
box |
path | yes | string |
Closed box internal ID, public UUID, or 18-digit SSCC. | "038123450000000013" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.public_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.sscc |
yes | string |
minLength: 18 maxLength: 18 pattern: ^\d{18}$ |
Unique normalized GS1 SSCC. Leading zeroes are preserved. | "038123450000000013" |
|
data.warehouse_id |
yes | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse_name |
yes | string | null |
"Client warehouse Sofia" |
|||
data.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.physical_warehouse_name |
yes | string | null |
"FF warehouse Sofia" |
|||
data.balance |
yes | 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 |
yes | enum |
enum: box | "box" |
||
data.status |
yes | string |
"routed" |
|||
data.seal_state |
yes | enum |
enum: sealed | "sealed" |
||
data.box_type |
yes | string |
"box" |
|||
data.barcode |
yes | string |
minLength: 1 maxLength: 190 |
"038123450000000013" |
||
data.package_product_id |
yes | integer:int64 | null |
min: 1 | 1202 |
||
data.package_product_name |
yes | string | null |
"Coffee box 12" |
|||
data.container_place_id |
yes | integer:int64 | null |
min: 1 | 5501 |
||
data.place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data.place_barcode |
yes | string | null |
"SHELF-501" |
|||
data.contents |
yes | array<ClosedBoxItem> |
|
|||
data.contents[] |
no | ClosedBoxItem |
|
|||
data.contents[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data.contents[].product_name |
yes | string | null |
"Coffee box 12" |
|||
data.contents[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.contents[].base_product_name |
yes | string | null |
"Coffee 250g" |
|||
data.contents[].quantity |
yes | number:float |
min: 0 | Recorded quantity in product units. For a quant product this is the number of boxes. | 1 |
|
data.contents[].base_quantity |
yes | number:float |
min: 0 | Recorded quantity converted to base product units. | 12 |
|
data.contents[].current_quantity |
yes | number:float |
min: 0 | Current positive quantity in the warehouse ledger row linked to this box content. | 1 |
|
data.contents[].batch |
yes | string | null |
"LOT-2026" |
|||
data.contents[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.contents[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
DataMatrix
List datamatrix
| operationId | listDataMatrix |
|---|---|
| Tag | DataMatrix |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/datamatrix" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | 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 | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status_id |
query | no | DataMatrixStatusId |
form | true | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
|
|
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
acceptance_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. |
1 |
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
barcode |
query | no | string |
form | true | Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. |
"4601234567890" |
|
datamatrix |
query | no | string |
form | true | Filter by datamatrix using partial text matching. The same filter may also be sent as filter[datamatrix] where supported by the Laravel query adapter. |
"010460123456789021ABC123" |
|
short_code |
query | no | string |
form | true | Filter by short_code using partial text matching. The same filter may also be sent as filter[short_code] where supported by the Laravel query adapter. |
"ABC123" |
|
batch |
query | no | string |
form | true | Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. |
"LOT-2026" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
used_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for used_at. The same filter may also be sent as filter[used_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
used_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for used_at. The same filter may also be sent as filter[used_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
production_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
accepted_at_from |
query | no | 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 | no | 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 | no | 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 | no | 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" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<DataMatrix> |
|
|||
data[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
Create datamatrix
| operationId | createDataMatrix |
|---|---|
| Tag | DataMatrix |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateDataMatrixRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateDataMatrixItemPayload |
|
|||
data |
yes | array<CreateDataMatrixItemPayload> |
minItems: 1 maxItems: 5000 |
|
||
data |
yes | object |
|
|||
data.items |
yes | array<CreateDataMatrixItemPayload> |
minItems: 1 maxItems: 5000 |
|
Request examples
default
{
"data": {
"items": [
{
"warehouse_id": 42,
"product_id": 1201,
"barcode": "04601234567890",
"datamatrix": "010460123456789021ABC123"
},
{
"warehouse_id": 42,
"product_id": 1201,
"barcode": "04601234567891",
"datamatrix": "010460123456789021ABC124"
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | DataMatrixImportResult |
|
|||
data.created |
yes | integer:int64 |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"created": 2
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete datamatrix
| operationId | deleteDataMatrix |
|---|---|
| Tag | DataMatrix |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
DeleteDataMatrixRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | DataMatrixIdsPayload |
|
|||
data.ids |
yes | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
no | integer:int64 |
min: 1 | 6101 |
Request examples
default
{
"data": {
"ids": [
6101,
6102
]
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | DataMatrixDeleteResult |
|
|||
data.deleted |
yes | integer:int64 |
min: 0 | 1 |
||
data.skipped |
yes | integer:int64 |
min: 0 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"deleted": 1,
"skipped": 1
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update DataMatrix status
| operationId | updateDataMatrixStatus |
|---|---|
| Tag | DataMatrix |
| Security | bearerAuth |
Changes the status of multiple DataMatrix codes after verifying all IDs belong to the caller visible domain.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceDataMatrixStatusRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.ids |
yes | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
no | integer:int64 |
min: 1 | 6101 |
||
data.status_id |
yes | 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 |
Request examples
default
{
"data": {
"ids": [
6101,
6102
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | DataMatrixStatusUpdateResult |
|
|||
data.updated |
yes | integer:int64 |
min: 0 | 2 |
||
data.dmt_status |
yes | 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 |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"updated": 2,
"dmt_status": 1
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update DataMatrix status
| operationId | updateDataMatrixStatusByPath |
|---|---|
| Tag | DataMatrix |
| Security | bearerAuth |
Update DataMatrix status. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchDataMatrixStatusRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.ids |
yes | array<integer:int64> |
minItems: 1 maxItems: 10000 |
|
||
data.ids[] |
no | integer:int64 |
min: 1 | 6101 |
||
data.status_id |
yes | 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 |
Request examples
default
{
"data": {
"ids": [
6101,
6102
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | DataMatrixStatusUpdateResult |
|
|||
data.updated |
yes | integer:int64 |
min: 0 | 2 |
||
data.dmt_status |
yes | 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 |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"updated": 2,
"dmt_status": 1
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delivery Payments
List delivery payments
| operationId | listOrderDeliveryPayments |
|---|---|
| Tag | Delivery Payments |
| Security | bearerAuth |
Returns delivery payments visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/order-delivery-payments" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, order_id, track_id, delivery_sum, cod_sum, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
payment_order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by payment_order_id using exact matching. The same filter may also be sent as filter[payment_order_id] where supported by the Laravel query adapter. |
9401 |
transaction_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by transaction_id using exact matching. The same filter may also be sent as filter[transaction_id] where supported by the Laravel query adapter. |
9501 |
cod_act_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by cod_act_id using exact matching. The same filter may also be sent as filter[cod_act_id] where supported by the Laravel query adapter. |
9601 |
track_id |
query | no | string |
form | true | Filter by track_id using partial text matching. The same filter may also be sent as filter[track_id] where supported by the Laravel query adapter. |
"CDEK-123456789" |
|
etalon_order_id |
query | no | string |
form | true | Filter by etalon_order_id using partial text matching. The same filter may also be sent as filter[etalon_order_id] where supported by the Laravel query adapter. |
"EXT-10045" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
delivery_sum_from |
query | no | number:float |
form | true | Lower inclusive numeric boundary for delivery_sum. The same filter may also be sent as filter[delivery_sum_from] where supported by the Laravel query adapter. |
48.58 |
|
delivery_sum_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for delivery_sum. The same filter may also be sent as filter[delivery_sum_to] where supported by the Laravel query adapter. |
48.58 |
|
cod_sum_from |
query | no | number:float |
form | true | Lower inclusive numeric boundary for cod_sum. The same filter may also be sent as filter[cod_sum_from] where supported by the Laravel query adapter. |
48.58 |
|
cod_sum_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for cod_sum. The same filter may also be sent as filter[cod_sum_to] where supported by the Laravel query adapter. |
48.58 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<OrderDeliveryPayment> |
|
|||
data[] |
no | OrderDeliveryPayment |
Delivery payment reconciliation row. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].track_id |
no | string | null |
"CDEK-123456789" |
|||
data[].amounts |
yes | OrderDeliveryPaymentAmounts |
|
|||
data[].amounts.delivery_sum |
no | number:float | null |
8.6 |
|||
data[].amounts.delivery_tax |
no | number:float | null |
1.72 |
|||
data[].amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data[].amounts.cod_agent_sum |
no | number:float | null |
1.5 |
|||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].payment_order_id |
no | integer:int64 | null |
min: 1 | 9401 |
||
data[].etalon_order_id |
no | string | null |
"EXT-10045" |
|||
data[].transaction_id |
no | integer:int64 | null |
min: 1 | 9501 |
||
data[].cod_act_id |
no | integer:int64 | null |
min: 1 | 9601 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Loading Visits
List loading visits
| operationId | listLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Returns loading visits visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, planned_at, registered_at, queue_number, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
client_warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by client_warehouse_id using exact matching. The same filter may also be sent as filter[client_warehouse_id] where supported by the Laravel query adapter. |
43 |
shop_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. |
12 |
type |
query | no | LoadingVisitType |
form | true | Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. |
|
|
status |
query | no | LoadingVisitStatus |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
|
|
document_type |
query | no | LoadingVisitDocumentType |
form | true | Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. |
|
|
document_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. |
5101 |
driver_phone |
query | no | string |
form | true | Filter by driver_phone using partial text matching. The same filter may also be sent as filter[driver_phone] where supported by the Laravel query adapter. |
"+359888123456" |
|
driver_name |
query | no | string |
form | true | Filter by driver_name using partial text matching. The same filter may also be sent as filter[driver_name] where supported by the Laravel query adapter. |
"Ivan Petrov" |
|
vehicle_number |
query | no | string |
form | true | Filter by vehicle_number using partial text matching. The same filter may also be sent as filter[vehicle_number] where supported by the Laravel query adapter. |
"CB1234AB" |
|
planned_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for planned_at. The same filter may also be sent as filter[planned_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
planned_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for planned_at. The same filter may also be sent as filter[planned_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
registered_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for registered_at. The same filter may also be sent as filter[registered_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
registered_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for registered_at. The same filter may also be sent as filter[registered_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<LoadingVisit> |
|
|||
data[] |
no | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data[].status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data[].queue_number |
no | integer:int64 | null |
17 |
|||
data[].driver |
yes | LoadingVisitDriver |
|
|||
data[].driver.phone |
no | string | null |
"+359888123456" |
|||
data[].driver.name |
no | string | null |
"Ivan Petrov" |
|||
data[].driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data[].document |
yes | LoadingVisitDocument |
|
|||
data[].document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data[].document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data[].planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data[].registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data[].called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].comment |
no | string | null |
"ASN-100245" |
|||
data[].warehouse_comment |
no | string | null |
"Gate 2" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create loading visit
| operationId | createLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateLoadingVisitPayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"type": "inbound",
"warehouse_id": 42,
"planned_at": "2026-07-14T10:00:00Z",
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
}
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get loading visit
| operationId | getLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Returns one loading visit when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update loading visit
| operationId | replaceLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Update loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
no | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"planned_at": "2026-07-14T11:00:00Z",
"gate_id": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update loading visit
| operationId | patchLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Update loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
no | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"gate_id": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Cancel loading visit
| operationId | cancelLoadingVisitByPath |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Cancel loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Notification Templates
List notification templates
| operationId | listNotificationTemplates |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns a tenant-scoped, paginated list of document-status notification templates.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | 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 | no | 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 | no | 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 | no | integer:int64 |
min: 0 | Exact template ID. | 41 |
||
filter[name] |
query | no | string |
Case-insensitive partial template name. | "Acceptance closed" |
|||
filter[channel] |
query | no | enum |
enum: email, internal | Exact delivery channel. | "email" |
||
filter[document_type] |
query | no | enum |
enum: acceptance, order | Exact document type. | "acceptance" |
||
filter[document_status_id] |
query | no | integer:int64 |
min: 0 | Exact target document status ID. | 4 |
||
filter[status_id] |
query | no | integer:int64 |
min: 0 | Exact template status: 0 or 1. | 1 |
||
filter[owner_user_id] |
query | no | integer:int64 |
min: 0 | Exact owner user ID. | 15 |
||
created_at_from |
query | no | 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 | no | 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 | no | 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 | no | 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" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<NotificationTemplate> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data[].name |
yes | string |
"Acceptance closed" |
|||
data[].event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data[].channel |
yes | enum |
enum: email, internal | "email" |
||
data[].document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data[].document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data[].delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data[].start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data[].conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data[].subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data[].body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data[].body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data[].attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data[].bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data[].bindings |
no | array<NotificationTemplateBinding> |
|
|||
data[].bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data[].bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse |
no | object | null |
|
|||
data[].bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data[].bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data[].bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data[].bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data[].bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data[].bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create notification template
| operationId | createNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Creates a notification template in the authenticated user domain. Domain, owner and event are assigned server-side.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateNotificationTemplatePayload |
|
|||
data.name |
yes | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get notification template
| operationId | getNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns one visible template with its current warehouse bindings.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template
| operationId | replaceNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplatePayload |
|
|||
data.name |
no | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
no | enum |
enum: email, internal | "email" |
||
data.document_type |
no | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
no | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template
| operationId | patchNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied template fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplatePayload |
|
|||
data.name |
no | string |
maxLength: 150 | "Acceptance closed" |
||
data.channel |
no | enum |
enum: email, internal | "email" |
||
data.document_type |
no | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
no | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
no | integer:int64 | null |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
no | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
no | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
no | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
no | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
no | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"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
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.owner_user_id |
yes | integer:int64 | null |
min: 1 | 15 |
||
data.name |
yes | string |
"Acceptance closed" |
|||
data.event |
yes | enum |
enum: document.status_changed | "document.status_changed" |
||
data.channel |
yes | enum |
enum: email, internal | "email" |
||
data.document_type |
yes | enum |
enum: acceptance, order | "acceptance" |
||
data.document_status_id |
yes | integer:int64 |
min: 0 | 4 |
||
data.delay_hours |
yes | integer:int64 |
min: 0 max: 8760 |
0 |
||
data.start_document_id |
yes | integer:int64 | null |
min: 1 | 1000 |
||
data.conditions |
yes | object |
{"acceptance_has_discrepancy":true} |
|||
data.subject |
yes | string | null |
maxLength: 255 | "Document \#{doc_id}: {doc_status_name}" |
||
data.body_html |
yes | string | null |
"<p>Document \#{doc_id} is closed.</p>" |
|||
data.body_text |
yes | string | null |
"Document \#{doc_id} is closed." |
|||
data.attachment_print_template_id |
yes | integer:int64 | null |
min: 1 | 12 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
data.bindings_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.bindings |
no | array<NotificationTemplateBinding> |
|
|||
data.bindings[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.bindings[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.bindings[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.bindings[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.bindings[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.bindings[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse |
no | object | null |
|
|||
data.bindings[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.bindings[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.bindings[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.bindings[].recipients[] |
no | string:email |
"client@example.com" |
|||
data.bindings[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.bindings[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.bindings[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.bindings[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete notification template
| operationId | deleteNotificationTemplate |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Deletes the template and its warehouse bindings in one transaction. Existing notification-message history is preserved.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
List notification template bindings
| operationId | listNotificationTemplateBindings |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns the paginated warehouse and recipient bindings of one visible template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | 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 | no | 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 | no | integer:int64 |
min: 0 | Exact binding ID. | 7 |
||
filter[warehouse_id] |
query | no | integer:int64 |
min: 0 | Exact warehouse ID. | 42 |
||
filter[status_id] |
query | no | integer:int64 |
min: 0 | Exact binding status: 0 or 1. | 1 |
||
filter[internal_recipient_mode] |
query | no | enum |
enum: warehouse_users, domain_users, explicit | Exact internal recipient mode. | "warehouse_users" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<NotificationTemplateBinding> |
|
|||
data[] |
no | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse |
no | object | null |
|
|||
data[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data[].recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data[].recipients[] |
no | string:email |
"client@example.com" |
|||
data[].internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data[].internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data[].internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data[].status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create notification template binding
| operationId | createNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Binds one visible client warehouse to the template. A warehouse can be bound only once per template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get notification template binding
| operationId | getNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Returns one warehouse and recipient binding of a visible template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/notification-templates/41/bindings/7" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template binding
| operationId | replaceNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
no | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update notification template binding
| operationId | patchNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Updates the supplied warehouse-binding fields. Omitted fields remain unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
UpdateNotificationTemplateBindingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | UpdateNotificationTemplateBindingPayload |
|
|||
data.warehouse_id |
no | integer:int64 |
min: 1 | 42 |
||
data.recipients |
no | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
no | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
no | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
no | enum:int64 |
enum: 0, 1 | 1 |
Request examples
Example
{
"data": {
"warehouse_id": 42,
"recipients": [
"client@example.com"
],
"internal_recipient_mode": "warehouse_users",
"internal_user_ids": [
],
"status_id": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | NotificationTemplateBinding |
Warehouse and recipient binding for one notification template. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.template_id |
yes | integer:int64 |
min: 1 | 41 |
||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Client Warehouse Sofia" |
|||
data.recipients |
yes | array<string:email> |
maxItems: 100 | |
||
data.recipients[] |
no | string:email |
"client@example.com" |
|||
data.internal_recipient_mode |
yes | enum |
enum: warehouse_users, domain_users, explicit | "warehouse_users" |
||
data.internal_user_ids |
yes | array<integer:int64> |
maxItems: 1000 | |
||
data.internal_user_ids[] |
no | integer:int64 |
min: 1 | 15 |
||
data.status_id |
yes | enum:int64 |
enum: 0, 1 | 1 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete notification template binding
| operationId | deleteNotificationTemplateBinding |
|---|---|
| Tag | Notification Templates |
| Security | bearerAuth |
Removes one warehouse and recipient binding from the template.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Notification template ID. | 41 |
||
bindingId |
path | yes | integer:int64 |
min: 1 | Notification template binding ID. | 7 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Orders
List orders
| operationId | listOrders |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Returns orders visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 50; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, order_date, send_date, sum, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
include |
query | no | string |
form | false | Comma-separated optional relations. Allowed values: offers, contact, delivery, comments, consumables, status_history. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"offers,contact,delivery,comments,consumables,status_history" |
|
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
external_id |
query | no | string |
form | true | Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. |
"EXT-10045" |
|
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
shop_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. |
12 |
type_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. |
1 |
source_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by source_id using exact matching. The same filter may also be sent as filter[source_id] where supported by the Laravel query adapter. |
1 |
customer_type |
query | no | integer:int64 |
form | true | min: 1 | Filter by customer_type using exact matching. The same filter may also be sent as filter[customer_type] where supported by the Laravel query adapter. |
1 |
company_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by company_id using exact matching. The same filter may also be sent as filter[company_id] where supported by the Laravel query adapter. |
7 |
is_cod |
query | no | boolean |
form | true | Filter by is_cod using exact matching. The same filter may also be sent as filter[is_cod] where supported by the Laravel query adapter. |
false |
|
order_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for order_date. The same filter may also be sent as filter[order_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
order_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for order_date. The same filter may also be sent as filter[order_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
send_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for send_date. The same filter may also be sent as filter[send_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
send_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for send_date. The same filter may also be sent as filter[send_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | 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 | no | 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 | no | number:float |
form | true | Lower inclusive numeric boundary for sum. The same filter may also be sent as filter[sum_from] where supported by the Laravel query adapter. |
48.58 |
|
sum_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for sum. The same filter may also be sent as filter[sum_to] where supported by the Laravel query adapter. |
48.58 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Order> |
|
|||
data[] |
no | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"ORD-100245" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data[].status |
no | object | null |
|
|||
data[].status.id |
yes | integer:int64 |
20 |
|||
data[].status.name |
yes | string |
"Created" |
|||
data[].status.color |
no | string | null |
"#2457c5" |
|||
data[].status.background_color |
no | string | null |
"#eaf0ff" |
|||
data[].order_date |
no | string:date | null |
"2026-07-14" |
|||
data[].send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data[].customer_type |
no | integer:int64 | null |
1 |
|||
data[].is_cod |
no | boolean |
true |
|||
data[].amounts |
no | OrderAmounts |
|
|||
data[].amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data[].amounts.shipping_cost |
no | number:float | null |
0 |
|||
data[].amounts.sum |
no | number:float | null |
39.98 |
|||
data[].amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data[].company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data[].marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data[].marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data[].marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data[].contact |
no | object | null |
|
|||
data[].contact.first_name |
no | string | null |
"Ivan" |
|||
data[].contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data[].contact.last_name |
no | string | null |
"Petrov" |
|||
data[].contact.phone |
no | string | null |
"+359888123456" |
|||
data[].contact.email |
no | string:email | null |
"customer@example.com" |
|||
data[].contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data[].contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data[].contact.postcode |
no | string | null |
"1000" |
|||
data[].contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data[].contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data[].contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data[].delivery |
no | object | null |
|
|||
data[].delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data[].delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data[].delivery.status |
no | string | null |
"created" |
|||
data[].delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data[].delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data[].delivery.source_id |
no | string | null |
"cdek-15" |
|||
data[].delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data[].delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data[].delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data[].delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data[].delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data[].comments |
no | object | null |
|
|||
data[].comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data[].comments.inner_text |
no | string | null |
"VIP customer" |
|||
data[].offers |
no | array<OrderLineEmbedded> |
|
|||
data[].offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data[].offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data[].offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data[].offers[].price |
no | number:float | null |
19.99 |
|||
data[].offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data[].offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].offers[].product |
no | object | null |
|
|||
data[].offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data[].offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data[].offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data[].offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data[].offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data[].offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data[].offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data[].offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data[].offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data[].offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data[].offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data[].offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data[].offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data[].offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data[].offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data[].offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data[].offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].offers[].requested_lot |
no | WarehouseLot |
|
|||
data[].offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data[].offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data[].offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data[].offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data[].offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data[].reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data[].reservation.ready |
yes | boolean |
false |
|||
data[].reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data[].reservation.expected_total |
yes | number:float |
3 |
|||
data[].reservation.reserved_total |
yes | number:float |
1 |
|||
data[].reservation.unreserved_total |
yes | number:float |
2 |
|||
data[].reservation.missing_total |
yes | number:float |
2 |
|||
data[].reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data[].reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data[].reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data[].reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data[].reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data[].reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data[].reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data[].reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data[].reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data[].reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data[].reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data[].reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data[].reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data[].reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data[].reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data[].reservation.error |
yes | boolean |
false |
|||
data[].consumables |
no | array<OrderConsumable> |
|
|||
data[].consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data[].consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data[].consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data[].consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data[].consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data[].consumables[].quantity |
yes | number:float |
1 |
|||
data[].consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data[].consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data[].status_history[].status_id |
yes | integer:int64 |
130 |
|||
data[].status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data[].status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data[].status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data[].status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data[].status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data[].status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create order
| operationId | createOrders |
|---|---|
| Tag | Orders |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateOrderRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateOrderPayload |
|
|||
data.type_id |
yes | integer:int64 |
1 |
|||
data.shop_id |
yes | integer:int64 |
min: 1 | 12 |
||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.group_id |
no | oneOf<string | integer> |
|
|||
data.group_id |
no | string |
maxLength: 255 | "2ФИС" |
||
data.group_id |
no | integer |
Legacy numeric identifiers are also accepted. | |
||
data.send_date |
no | string:date | null |
"2026-07-15" |
|||
data.source_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.customer_type |
no | integer:int64 | null |
1 |
|||
data.is_cod |
no | boolean |
true |
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.amounts |
no | object | null |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.weight |
no | object | null |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.dimensions |
no | object | null |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.lines |
no | array<OrderEmbeddedLineCreatePayload> |
|
|||
data.lines[] |
no | OrderEmbeddedLineCreatePayload |
Line payload used inside order creation. The product is resolved by product_id or product_external_id. |
|
||
data.lines[] |
no | object |
|
|||
data.lines[] |
no | object |
|
Request examples
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
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
20 |
|||
data.status.name |
yes | string |
"Created" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.order_date |
no | string:date | null |
"2026-07-14" |
|||
data.send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data.customer_type |
no | integer:int64 | null |
1 |
|||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | OrderAmounts |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data.marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data.marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.offers |
no | array<OrderLineEmbedded> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.offers[].price |
no | number:float | null |
19.99 |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot |
no | WarehouseLot |
|
|||
data.offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data.reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data.reservation.ready |
yes | boolean |
false |
|||
data.reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data.reservation.expected_total |
yes | number:float |
3 |
|||
data.reservation.reserved_total |
yes | number:float |
1 |
|||
data.reservation.unreserved_total |
yes | number:float |
2 |
|||
data.reservation.missing_total |
yes | number:float |
2 |
|||
data.reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data.reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data.reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data.reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.reservation.error |
yes | boolean |
false |
|||
data.consumables |
no | array<OrderConsumable> |
|
|||
data.consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data.consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data.consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data.consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data.consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data.consumables[].quantity |
yes | number:float |
1 |
|||
data.consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data.consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data.status_history[].status_id |
yes | integer:int64 |
130 |
|||
data.status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data.status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data.status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data.status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data.status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data.status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get order
| operationId | getOrders |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Returns one order when it exists and is visible to the authenticated account.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
include |
query | no | 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" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
20 |
|||
data.status.name |
yes | string |
"Created" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.order_date |
no | string:date | null |
"2026-07-14" |
|||
data.send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data.customer_type |
no | integer:int64 | null |
1 |
|||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | OrderAmounts |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data.marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data.marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.offers |
no | array<OrderLineEmbedded> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.offers[].price |
no | number:float | null |
19.99 |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot |
no | WarehouseLot |
|
|||
data.offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data.reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data.reservation.ready |
yes | boolean |
false |
|||
data.reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data.reservation.expected_total |
yes | number:float |
3 |
|||
data.reservation.reserved_total |
yes | number:float |
1 |
|||
data.reservation.unreserved_total |
yes | number:float |
2 |
|||
data.reservation.missing_total |
yes | number:float |
2 |
|||
data.reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data.reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data.reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data.reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.reservation.error |
yes | boolean |
false |
|||
data.consumables |
no | array<OrderConsumable> |
|
|||
data.consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data.consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data.consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data.consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data.consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data.consumables[].quantity |
yes | number:float |
1 |
|||
data.consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data.consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data.status_history[].status_id |
yes | integer:int64 |
130 |
|||
data.status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data.status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data.status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data.status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data.status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data.status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update order
| operationId | replaceOrders |
|---|---|
| Tag | Orders |
| Security | 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.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceOrderRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceOrderPayload |
Legacy PUT payload. Current backend applies partial-update semantics and leaves omitted fields unchanged. | |
||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.send_date |
no | string:date | null |
"2026-07-16" |
|||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | object | null |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.weight |
no | object | null |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.dimensions |
no | object | null |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
Request examples
default
{
"data": {
"send_date": "2026-07-16",
"comments": {
"inner_text": "Priority shipment"
}
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
20 |
|||
data.status.name |
yes | string |
"Created" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.order_date |
no | string:date | null |
"2026-07-14" |
|||
data.send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data.customer_type |
no | integer:int64 | null |
1 |
|||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | OrderAmounts |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data.marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data.marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.offers |
no | array<OrderLineEmbedded> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.offers[].price |
no | number:float | null |
19.99 |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot |
no | WarehouseLot |
|
|||
data.offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data.reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data.reservation.ready |
yes | boolean |
false |
|||
data.reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data.reservation.expected_total |
yes | number:float |
3 |
|||
data.reservation.reserved_total |
yes | number:float |
1 |
|||
data.reservation.unreserved_total |
yes | number:float |
2 |
|||
data.reservation.missing_total |
yes | number:float |
2 |
|||
data.reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data.reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data.reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data.reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.reservation.error |
yes | boolean |
false |
|||
data.consumables |
no | array<OrderConsumable> |
|
|||
data.consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data.consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data.consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data.consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data.consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data.consumables[].quantity |
yes | number:float |
1 |
|||
data.consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data.consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data.status_history[].status_id |
yes | integer:int64 |
130 |
|||
data.status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data.status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data.status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data.status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data.status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data.status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update order
| operationId | patchOrders |
|---|---|
| Tag | Orders |
| Security | 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.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchOrderRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchOrderPayload |
Partial order update payload. Omitted fields are unchanged. | |
||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.send_date |
no | string:date | null |
"2026-07-16" |
|||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | object | null |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.weight |
no | object | null |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.dimensions |
no | object | null |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
Request examples
default
{
"data": {
"send_date": "2026-07-16"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"ORD-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
20 |
|||
data.status.name |
yes | string |
"Created" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.order_date |
no | string:date | null |
"2026-07-14" |
|||
data.send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data.customer_type |
no | integer:int64 | null |
1 |
|||
data.is_cod |
no | boolean |
true |
|||
data.amounts |
no | OrderAmounts |
|
|||
data.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.amounts.sum |
no | number:float | null |
39.98 |
|||
data.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data.marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data.marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data.contact |
no | object | null |
|
|||
data.contact.first_name |
no | string | null |
"Ivan" |
|||
data.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.contact.last_name |
no | string | null |
"Petrov" |
|||
data.contact.phone |
no | string | null |
"+359888123456" |
|||
data.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.contact.postcode |
no | string | null |
"1000" |
|||
data.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.delivery |
no | object | null |
|
|||
data.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.delivery.status |
no | string | null |
"created" |
|||
data.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.comments |
no | object | null |
|
|||
data.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.offers |
no | array<OrderLineEmbedded> |
|
|||
data.offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.offers[].price |
no | number:float | null |
19.99 |
|||
data.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.offers[].product |
no | object | null |
|
|||
data.offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data.offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data.offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data.offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot |
no | WarehouseLot |
|
|||
data.offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data.reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data.reservation.ready |
yes | boolean |
false |
|||
data.reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data.reservation.expected_total |
yes | number:float |
3 |
|||
data.reservation.reserved_total |
yes | number:float |
1 |
|||
data.reservation.unreserved_total |
yes | number:float |
2 |
|||
data.reservation.missing_total |
yes | number:float |
2 |
|||
data.reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data.reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data.reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data.reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data.reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data.reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data.reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data.reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data.reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data.reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data.reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data.reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data.reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data.reservation.error |
yes | boolean |
false |
|||
data.consumables |
no | array<OrderConsumable> |
|
|||
data.consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data.consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data.consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data.consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data.consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data.consumables[].quantity |
yes | number:float |
1 |
|||
data.consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data.consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data.status_history[].status_id |
yes | integer:int64 |
130 |
|||
data.status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data.status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data.status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data.status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data.status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data.status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete order
| operationId | deleteOrders |
|---|---|
| Tag | Orders |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Export Ozon and Wildberries interaction history for one order
| operationId | getOrderIntegrationEvents |
|---|---|
| Tag | Orders |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/orders/1001/integration-events" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
download |
query | no | boolean |
Return the same JSON as a downloadable attachment. | |
Request body
No request body.
Responses
200 Streamed history. Check export_complete even when HTTP status is 200.
Streamed history. Check export_complete even when HTTP status is 200.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
meta |
yes | object |
Schema version, UTC timezone, order/integration identifiers and coverage limitations. | |
||
events |
yes | array<object> |
|
|||
events[] |
no | object |
Source-qualified id, source, provider, account_id, at, HTTP details or snapshot, masked request/response and omission reason. | |
||
event_count |
yes | integer |
min: 0 | |
||
export_complete |
yes | boolean |
All retained readable sources were exported; not a guarantee of historical coverage. | |
||
export_error |
yes | string | null |
journal_read_failed if streaming was interrupted by a storage/read error. | |
401 Authentication required
Authentication required.
No response body.
403 Forbidden
Order/log access denied.
No response body.
404 Not found
Order not visible or no Ozon/Wildberries link exists.
No response body.
Create order
| operationId | createOrdersLines |
|---|---|
| Tag | Orders |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AddOrderLinesRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.lines |
yes | array<OrderLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
no | OrderLineCreatePayload |
Line payload for /orders/{id}/lines. Backend validation requires product_id for this endpoint. |
|
||
data.lines[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.lines[].quantity |
yes | number:float |
min: 0.01 | 2 |
||
data.lines[].estimated_price |
no | number:float | null |
19.5 |
|||
data.lines[].price |
no | number:float | null |
19.99 |
|||
data.lines[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.lines[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.lines[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
Request examples
default
{
"data": {
"lines": [
{
"product_id": 1201,
"quantity": 2,
"price": 19.99
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<OrderLine> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data[].estimated_price |
no | number:float | null |
19.5 |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].product |
no | object | null |
|
|||
data[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].requested_lot |
no | WarehouseLot |
|
|||
data[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update order
| operationId | replaceOrdersLines |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceOrderLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | OrderLineReplacePayload |
Legacy PUT line update payload. Current backend treats PUT as partial update. | |
||
data.quantity |
no | number:float | null |
min: 0.01 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
Request examples
default
{
"data": {
"quantity": 3,
"batch": "LOT-2026"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.quantity |
no | number:float | null |
min: 0 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.requested_lot |
no | WarehouseLot |
|
|||
data.requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update order
| operationId | patchOrdersLines |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchOrderLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | OrderLinePatchPayload |
Editable order line fields. The line ID is taken from the path and must not be repeated in the body. | |
||
data.quantity |
no | number:float | null |
min: 0.01 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
Request examples
default
{
"data": {
"quantity": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.quantity |
no | number:float | null |
min: 0 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.requested_lot |
no | WarehouseLot |
|
|||
data.requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete order
| operationId | deleteOrdersLines |
|---|---|
| Tag | Orders |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create order
| operationId | createOrdersOffers |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Compatibility alias for adding order lines. Prefer /lines in new integrations; behavior and validation are identical.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AddOrderLinesRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.lines |
yes | array<OrderLineCreatePayload> |
minItems: 1 | |
||
data.lines[] |
no | OrderLineCreatePayload |
Line payload for /orders/{id}/lines. Backend validation requires product_id for this endpoint. |
|
||
data.lines[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.lines[].quantity |
yes | number:float |
min: 0.01 | 2 |
||
data.lines[].estimated_price |
no | number:float | null |
19.5 |
|||
data.lines[].price |
no | number:float | null |
19.99 |
|||
data.lines[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.lines[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.lines[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
Request examples
default
{
"data": {
"lines": [
{
"product_id": 1201,
"quantity": 2,
"price": 19.99
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<OrderLine> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data[].estimated_price |
no | number:float | null |
19.5 |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].product |
no | object | null |
|
|||
data[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].requested_lot |
no | WarehouseLot |
|
|||
data[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update order
| operationId | replaceOrdersOffers |
|---|---|
| Tag | Orders |
| Security | bearerAuth |
Update order. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceOrderLineRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | OrderLineReplacePayload |
Legacy PUT line update payload. Current backend treats PUT as partial update. | |
||
data.quantity |
no | number:float | null |
min: 0.01 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
Request examples
default
{
"data": {
"quantity": 3,
"batch": "LOT-2026"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.quantity |
no | number:float | null |
min: 0 | 2 |
||
data.estimated_price |
no | number:float | null |
19.5 |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.product |
no | object | null |
|
|||
data.product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data.product.name |
yes | string |
"Coffee 250g" |
|||
data.product.external_id |
no | string | null |
"EXT-10045" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.requested_lot |
no | WarehouseLot |
|
|||
data.requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data.requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.picked_quantity |
no | number:float |
min: 0 | 2 |
||
data.fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data.fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data.fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data.fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data.fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data.fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete order
| operationId | deleteOrdersOffers |
|---|---|
| Tag | Orders |
| Security | 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.
This /offers route is a compatibility alias for /lines; use the /lines route in new integrations.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Order ID. | 1001 |
||
lineId |
path | yes | integer:int64 |
min: 1 | Document line ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Products
List products
| operationId | listProducts |
|---|---|
| Tag | Products |
| Security | bearerAuth |
Returns products visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, article, sku, price, created_at, updated_at, inventory_updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
external_id |
query | no | string |
form | true | Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. |
"EXT-10045" |
|
shop_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. |
12 |
status_id |
query | no | ProductStatusId |
form | true | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
|
|
type_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. |
1 |
package_kind |
query | no | string |
form | true | Filter by package_kind using exact matching. The same filter may also be sent as filter[package_kind] where supported by the Laravel query adapter. |
"unit" |
|
parent_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by parent_product_id using exact matching. The same filter may also be sent as filter[parent_product_id] where supported by the Laravel query adapter. |
1200 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
datamatrix_required |
query | no | boolean |
form | true | Filter by datamatrix_required using exact matching. The same filter may also be sent as filter[datamatrix_required] where supported by the Laravel query adapter. |
false |
|
expiration_required |
query | no | boolean |
form | true | Filter by expiration_required using exact matching. The same filter may also be sent as filter[expiration_required] where supported by the Laravel query adapter. |
false |
|
name |
query | no | string |
form | true | Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. |
"Coffee" |
|
article |
query | no | string |
form | true | Filter by article using partial text matching. The same filter may also be sent as filter[article] where supported by the Laravel query adapter. |
"ART-001245" |
|
sku |
query | no | string |
form | true | Filter by sku using partial text matching. The same filter may also be sent as filter[sku] where supported by the Laravel query adapter. |
"SKU-001245" |
|
comment |
query | no | string |
form | true | Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. |
"Priority" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
inventory_updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for inventory_updated_at. The same filter may also be sent as filter[inventory_updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
inventory_updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for inventory_updated_at. The same filter may also be sent as filter[inventory_updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
price_from |
query | no | number:float |
form | true | Lower inclusive numeric boundary for price. The same filter may also be sent as filter[price_from] where supported by the Laravel query adapter. |
19.99 |
|
price_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for price. The same filter may also be sent as filter[price_to] where supported by the Laravel query adapter. |
19.99 |
|
estimated_price_from |
query | no | number:float |
form | true | Lower inclusive numeric boundary for estimated_price. The same filter may also be sent as filter[estimated_price_from] where supported by the Laravel query adapter. |
19.99 |
|
estimated_price_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for estimated_price. The same filter may also be sent as filter[estimated_price_to] where supported by the Laravel query adapter. |
19.99 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Product> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"EXT-10045" |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].name |
yes | string |
"Coffee 250g" |
|||
data[].article |
no | string | null |
"ART-001245" |
|||
data[].sku |
no | string | null |
"SKU-001245" |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].estimated_price |
no | number:float | null |
21.5 |
|||
data[].image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
no | Dimensions |
|
|||
data[].dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data[].dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data[].dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data[].dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data[].weight |
no | Weight |
|
|||
data[].weight.value |
no | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
yes | enum |
enum: g | "g" |
||
data[].datamatrix_required |
yes | boolean |
false |
|||
data[].expiration_required |
yes | boolean |
true |
|||
data[].comment |
no | string | null |
"Keep dry" |
|||
data[].description |
no | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
no | array<ProductBarcode> |
|
|||
data[].barcodes[] |
no | ProductBarcode |
|
|||
data[].barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
yes | boolean |
true |
|||
data[].stocks |
no | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].package |
no | object | null |
|
|||
data[].package.kind |
no | string | null |
"unit" |
|||
data[].package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create product
| operationId | createProducts |
|---|---|
| Tag | Products |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
BulkCreateProductsRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateProductPayload |
|
|||
data |
yes | array<CreateProductPayload> |
minItems: 1 | |
Request examples
default
{
"data": [
{
"external_id": "EXT-10045",
"shop_id": 12,
"name": "Coffee 250g",
"barcodes": [
{
"barcode": "4601234567890",
"is_main": true
}
],
"type_id": 3
}
]
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | ProductMutationResponse |
Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items. |
|
||
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"EXT-10045" |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.name |
yes | string |
"Coffee 250g" |
|||
data.article |
no | string | null |
"ART-001245" |
|||
data.sku |
no | string | null |
"SKU-001245" |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.estimated_price |
no | number:float | null |
21.5 |
|||
data.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
no | Dimensions |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.weight |
no | Weight |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.datamatrix_required |
yes | boolean |
false |
|||
data.expiration_required |
yes | boolean |
true |
|||
data.comment |
no | string | null |
"Keep dry" |
|||
data.description |
no | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
no | array<ProductBarcode> |
|
|||
data.barcodes[] |
no | ProductBarcode |
|
|||
data.barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
yes | boolean |
true |
|||
data.stocks |
no | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data.stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data.package |
no | object | null |
|
|||
data.package.kind |
no | string | null |
"unit" |
|||
data.package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
|||
data |
yes | array<Product> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"EXT-10045" |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].name |
yes | string |
"Coffee 250g" |
|||
data[].article |
no | string | null |
"ART-001245" |
|||
data[].sku |
no | string | null |
"SKU-001245" |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].estimated_price |
no | number:float | null |
21.5 |
|||
data[].image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
no | Dimensions |
|
|||
data[].dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data[].dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data[].dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data[].dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data[].weight |
no | Weight |
|
|||
data[].weight.value |
no | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
yes | enum |
enum: g | "g" |
||
data[].datamatrix_required |
yes | boolean |
false |
|||
data[].expiration_required |
yes | boolean |
true |
|||
data[].comment |
no | string | null |
"Keep dry" |
|||
data[].description |
no | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
no | array<ProductBarcode> |
|
|||
data[].barcodes[] |
no | ProductBarcode |
|
|||
data[].barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
yes | boolean |
true |
|||
data[].stocks |
no | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].package |
no | object | null |
|
|||
data[].package.kind |
no | string | null |
"unit" |
|||
data[].package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update product
| operationId | replaceProducts |
|---|---|
| Tag | Products |
| Security | 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.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
BulkReplaceProductsRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceProductPayload |
|
|||
data |
yes | array<ReplaceProductPayload> |
minItems: 1 | |
Request examples
default
{
"data": [
{
"id": 1201,
"name": "Coffee 250g",
"price": 19.99,
"type_id": 3
}
]
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | ProductMutationResponse |
Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items. |
|
||
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"EXT-10045" |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.name |
yes | string |
"Coffee 250g" |
|||
data.article |
no | string | null |
"ART-001245" |
|||
data.sku |
no | string | null |
"SKU-001245" |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.estimated_price |
no | number:float | null |
21.5 |
|||
data.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
no | Dimensions |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.weight |
no | Weight |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.datamatrix_required |
yes | boolean |
false |
|||
data.expiration_required |
yes | boolean |
true |
|||
data.comment |
no | string | null |
"Keep dry" |
|||
data.description |
no | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
no | array<ProductBarcode> |
|
|||
data.barcodes[] |
no | ProductBarcode |
|
|||
data.barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
yes | boolean |
true |
|||
data.stocks |
no | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data.stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data.package |
no | object | null |
|
|||
data.package.kind |
no | string | null |
"unit" |
|||
data.package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
|||
data |
yes | array<Product> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"EXT-10045" |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].name |
yes | string |
"Coffee 250g" |
|||
data[].article |
no | string | null |
"ART-001245" |
|||
data[].sku |
no | string | null |
"SKU-001245" |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].estimated_price |
no | number:float | null |
21.5 |
|||
data[].image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
no | Dimensions |
|
|||
data[].dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data[].dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data[].dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data[].dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data[].weight |
no | Weight |
|
|||
data[].weight.value |
no | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
yes | enum |
enum: g | "g" |
||
data[].datamatrix_required |
yes | boolean |
false |
|||
data[].expiration_required |
yes | boolean |
true |
|||
data[].comment |
no | string | null |
"Keep dry" |
|||
data[].description |
no | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
no | array<ProductBarcode> |
|
|||
data[].barcodes[] |
no | ProductBarcode |
|
|||
data[].barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
yes | boolean |
true |
|||
data[].stocks |
no | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].package |
no | object | null |
|
|||
data[].package.kind |
no | string | null |
"unit" |
|||
data[].package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update product
| operationId | patchProducts |
|---|---|
| Tag | Products |
| Security | bearerAuth |
Partially bulk updates products. Only supplied product fields are changed.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
BulkPatchProductsRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchProductPayload |
|
|||
data |
yes | array<PatchProductPayload> |
minItems: 1 | |
Request examples
default
{
"data": [
{
"external_id": "EXT-10045",
"shop_id": 12,
"price": 18.99,
"type_id": 3
}
]
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
(root) |
no | ProductMutationResponse |
Single-object product writes return ProductResponse; array product writes return ProductCollectionResponse in the same input order for successfully processed items. |
|
||
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"EXT-10045" |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.name |
yes | string |
"Coffee 250g" |
|||
data.article |
no | string | null |
"ART-001245" |
|||
data.sku |
no | string | null |
"SKU-001245" |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.estimated_price |
no | number:float | null |
21.5 |
|||
data.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
no | Dimensions |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.weight |
no | Weight |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.datamatrix_required |
yes | boolean |
false |
|||
data.expiration_required |
yes | boolean |
true |
|||
data.comment |
no | string | null |
"Keep dry" |
|||
data.description |
no | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
no | array<ProductBarcode> |
|
|||
data.barcodes[] |
no | ProductBarcode |
|
|||
data.barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
yes | boolean |
true |
|||
data.stocks |
no | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data.stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data.package |
no | object | null |
|
|||
data.package.kind |
no | string | null |
"unit" |
|||
data.package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
|||
data |
yes | array<Product> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"EXT-10045" |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].name |
yes | string |
"Coffee 250g" |
|||
data[].article |
no | string | null |
"ART-001245" |
|||
data[].sku |
no | string | null |
"SKU-001245" |
|||
data[].price |
no | number:float | null |
19.99 |
|||
data[].estimated_price |
no | number:float | null |
21.5 |
|||
data[].image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data[].dimensions |
no | Dimensions |
|
|||
data[].dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data[].dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data[].dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data[].dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data[].weight |
no | Weight |
|
|||
data[].weight.value |
no | number:float | null |
min: 0 | 250 |
||
data[].weight.unit |
yes | enum |
enum: g | "g" |
||
data[].datamatrix_required |
yes | boolean |
false |
|||
data[].expiration_required |
yes | boolean |
true |
|||
data[].comment |
no | string | null |
"Keep dry" |
|||
data[].description |
no | string | null |
"Ground coffee package" |
|||
data[].inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].barcodes |
no | array<ProductBarcode> |
|
|||
data[].barcodes[] |
no | ProductBarcode |
|
|||
data[].barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data[].barcodes[].is_main |
yes | boolean |
true |
|||
data[].stocks |
no | ProductStocks |
|
|||
data[].stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data[].stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data[].stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data[].stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data[].stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data[].stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data[].stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data[].stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data[].package |
no | object | null |
|
|||
data[].package.kind |
no | string | null |
"unit" |
|||
data[].package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data[].package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get product
| operationId | getProducts |
|---|---|
| Tag | Products |
| Security | bearerAuth |
Returns one product when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Product ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"EXT-10045" |
|||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.type_id |
no | integer:int64 | null |
1 |
|||
data.name |
yes | string |
"Coffee 250g" |
|||
data.article |
no | string | null |
"ART-001245" |
|||
data.sku |
no | string | null |
"SKU-001245" |
|||
data.price |
no | number:float | null |
19.99 |
|||
data.estimated_price |
no | number:float | null |
21.5 |
|||
data.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.dimensions |
no | Dimensions |
|
|||
data.dimensions.x |
no | number:float | null |
min: 0 | 105 |
||
data.dimensions.y |
no | number:float | null |
min: 0 | 200 |
||
data.dimensions.z |
no | number:float | null |
min: 0 | 32 |
||
data.dimensions.unit |
yes | enum |
enum: mm | "mm" |
||
data.weight |
no | Weight |
|
|||
data.weight.value |
no | number:float | null |
min: 0 | 250 |
||
data.weight.unit |
yes | enum |
enum: g | "g" |
||
data.datamatrix_required |
yes | boolean |
false |
|||
data.expiration_required |
yes | boolean |
true |
|||
data.comment |
no | string | null |
"Keep dry" |
|||
data.description |
no | string | null |
"Ground coffee package" |
|||
data.inventory_updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.barcodes |
no | array<ProductBarcode> |
|
|||
data.barcodes[] |
no | ProductBarcode |
|
|||
data.barcodes[].barcode |
yes | string |
minLength: 1 maxLength: 64 |
"4601234567890" |
||
data.barcodes[].is_main |
yes | boolean |
true |
|||
data.stocks |
no | ProductStocks |
|
|||
data.stocks.available_by_warehouse |
no | object |
Map keyed by warehouse ID. Values are quantities. | {"42":18.0,"43":3.0} |
||
data.stocks.physical |
no | array<ProductStockSummary> |
Physical stock rows for the product itself. | |
||
data.stocks.physical[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.physical[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.physical[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.physical[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.physical[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.physical[].stockAvailable |
yes | number:float |
18.0 |
|||
data.stocks.aggregate |
no | array<ProductStockSummary> |
Aggregated base-unit stock rows for the product and its descendant quants. | |
||
data.stocks.aggregate[] |
no | ProductStockSummary |
Stock totals for one warehouse. Quantities may be negative when reservations exceed physical stock. | |
||
data.stocks.aggregate[].warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.stocks.aggregate[].warehouse_name |
yes | string | null |
"Warehouse Sofia" |
|||
data.stocks.aggregate[].stockTotal |
yes | number:float |
24.0 |
|||
data.stocks.aggregate[].stockReserved |
yes | number:float |
6.0 |
|||
data.stocks.aggregate[].stockAvailable |
yes | number:float |
18.0 |
|||
data.package |
no | object | null |
|
|||
data.package.kind |
no | string | null |
"unit" |
|||
data.package.parent_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.package.base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data.package.multiplicity |
no | number:float | null |
min: 0 | 6 |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Delete product
| operationId | deleteProducts |
|---|---|
| Tag | Products |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Product ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 1001
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
List physical stock lots
| operationId | getProductStockLots |
|---|---|
| Tag | Products |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/products/1001/stock-lots" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Product ID. | 1001 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, warehouse_id, expiration_date. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
batch |
query | no | string |
form | true | Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. |
"LOT-2026" |
|
production_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<StockLot> |
|
|||
data[] |
no | 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 |
yes | string | null |
"LOT-2026" |
|||
data[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].id |
yes | integer:int64 |
min: 1 | 5001 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data[].place_id |
yes | integer:int64 |
min: 1 | 501 |
||
data[].physical_quantity |
yes | number:float |
min: 0 | 12 |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Quant Unpackings
List quant unpackings
| operationId | listQuantUnpackings |
|---|---|
| Tag | Quant Unpackings |
| Security | bearerAuth |
Returns quant unpackings visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, document_date, conducted_at, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
after_id |
query | no | integer:int64 |
form | true | min: 0 | Return rows with an ID greater than this value. The boundary is exclusive. The same filter may also be sent as filter[after_id] where supported by the Laravel query adapter. |
1000 |
include |
query | no | string |
form | false | Comma-separated optional relations. Allowed values: items. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"items" |
|
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
external_id |
query | no | string |
form | true | Filter by external_id using exact matching. The same filter may also be sent as filter[external_id] where supported by the Laravel query adapter. |
"EXT-10045" |
|
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
user_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by user_id using exact matching. The same filter may also be sent as filter[user_id] where supported by the Laravel query adapter. |
15 |
comment |
query | no | string |
form | true | Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. |
"Priority" |
|
document_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
document_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
conducted_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for conducted_at. The same filter may also be sent as filter[conducted_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
conducted_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for conducted_at. The same filter may also be sent as filter[conducted_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<QuantUnpacking> |
|
|||
data[] |
no | QuantUnpacking |
Quant unpacking document. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"QU-100245" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].status_id |
no | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data[].document_date |
no | string:date | null |
"2026-07-14" |
|||
data[].counts |
yes | object |
|
|||
data[].counts.source |
yes | number:float |
1 |
|||
data[].counts.target |
yes | number:float |
6 |
|||
data[].counts.source_moved |
yes | number:float |
0 |
|||
data[].counts.target_moved |
yes | number:float |
0 |
|||
data[].conducted_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].comment |
no | string | null |
"Unpack coffee box" |
|||
data[].items |
no | array<QuantUnpackingItem> |
|
|||
data[].items[] |
no | QuantUnpackingItem |
Quant unpacking line. | |
||
data[].items[].id |
yes | integer:int64 |
readOnly | min: 1 | 9001 |
|
data[].items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data[].items[].target_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data[].items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data[].items[].source_quantity |
yes | number:float |
min: 0 | 1 |
||
data[].items[].target_quantity |
no | number:float | null |
min: 0 | 6 |
||
data[].items[].available_quantity |
no | number:float | null |
min: 0 | 10 |
||
data[].items[].batch |
no | string | null |
"LOT-2026" |
|||
data[].items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].items[].comment |
no | string | null |
"Box unpacked" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create quant unpacking
| operationId | createQuantUnpackings |
|---|---|
| Tag | Quant Unpackings |
| Security | bearerAuth |
Create quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateQuantUnpackingRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateQuantUnpackingPayload |
|
|||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.document_date |
no | string:date | null |
"2026-07-14" |
|||
data.external_id |
no | string | null |
"QU-100245" |
|||
data.comment |
no | string | null |
"Unpack coffee box" |
|||
data.conduct |
no | boolean |
false |
|||
data.items |
yes | array<QuantUnpackingItemCreatePayload> |
minItems: 1 | |
||
data.items[] |
no | QuantUnpackingItemCreatePayload |
Quant unpacking source item. Target product and target quantity are derived by the package service. | |
||
data.items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.items[].source_quantity |
yes | number:float |
min: 0.001 | 1 |
||
data.items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.items[].batch |
no | string | null |
"LOT-2026" |
|||
data.items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
no | string | null |
"Box unpacked" |
Request examples
default
{
"data": {
"warehouse_id": 42,
"external_id": "QU-100245",
"items": [
{
"source_product_id": 1200,
"source_quantity": 1,
"source_place_id": 501
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | QuantUnpacking |
Quant unpacking document. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"QU-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
no | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
no | string:date | null |
"2026-07-14" |
|||
data.counts |
yes | object |
|
|||
data.counts.source |
yes | number:float |
1 |
|||
data.counts.target |
yes | number:float |
6 |
|||
data.counts.source_moved |
yes | number:float |
0 |
|||
data.counts.target_moved |
yes | number:float |
0 |
|||
data.conducted_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
no | string | null |
"Unpack coffee box" |
|||
data.items |
no | array<QuantUnpackingItem> |
|
|||
data.items[] |
no | QuantUnpackingItem |
Quant unpacking line. | |
||
data.items[].id |
yes | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
yes | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
no | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
no | string | null |
"LOT-2026" |
|||
data.items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
no | string | null |
"Box unpacked" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get quant unpacking
| operationId | getQuantUnpackings |
|---|---|
| Tag | Quant Unpackings |
| Security | bearerAuth |
Returns one quant unpacking when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/quant-unpackings/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Quant unpacking document ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | QuantUnpacking |
Quant unpacking document. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"QU-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
no | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
no | string:date | null |
"2026-07-14" |
|||
data.counts |
yes | object |
|
|||
data.counts.source |
yes | number:float |
1 |
|||
data.counts.target |
yes | number:float |
6 |
|||
data.counts.source_moved |
yes | number:float |
0 |
|||
data.counts.target_moved |
yes | number:float |
0 |
|||
data.conducted_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
no | string | null |
"Unpack coffee box" |
|||
data.items |
no | array<QuantUnpackingItem> |
|
|||
data.items[] |
no | QuantUnpackingItem |
Quant unpacking line. | |
||
data.items[].id |
yes | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
yes | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
no | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
no | string | null |
"LOT-2026" |
|||
data.items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
no | string | null |
"Box unpacked" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Conduct quant unpacking
| operationId | conductQuantUnpacking |
|---|---|
| Tag | Quant Unpackings |
| Security | bearerAuth |
Conduct quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Quant unpacking document ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | QuantUnpacking |
Quant unpacking document. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"QU-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
no | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
no | string:date | null |
"2026-07-14" |
|||
data.counts |
yes | object |
|
|||
data.counts.source |
yes | number:float |
1 |
|||
data.counts.target |
yes | number:float |
6 |
|||
data.counts.source_moved |
yes | number:float |
0 |
|||
data.counts.target_moved |
yes | number:float |
0 |
|||
data.conducted_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
no | string | null |
"Unpack coffee box" |
|||
data.items |
no | array<QuantUnpackingItem> |
|
|||
data.items[] |
no | QuantUnpackingItem |
Quant unpacking line. | |
||
data.items[].id |
yes | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
yes | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
no | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
no | string | null |
"LOT-2026" |
|||
data.items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
no | string | null |
"Box unpacked" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Add quant unpacking
| operationId | addQuantUnpackingsItems |
|---|---|
| Tag | Quant Unpackings |
| Security | bearerAuth |
Add quant unpacking. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Quant unpacking document ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AddQuantUnpackingItemRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | QuantUnpackingItemCreatePayload |
Quant unpacking source item. Target product and target quantity are derived by the package service. | |
||
data.source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.source_quantity |
yes | number:float |
min: 0.001 | 1 |
||
data.source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.batch |
no | string | null |
"LOT-2026" |
|||
data.production_date |
no | string:date | null |
"2026-01-15" |
|||
data.expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.comment |
no | string | null |
"Box unpacked" |
Request examples
default
{
"data": {
"source_product_id": 1200,
"source_quantity": 1,
"source_place_id": 501
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | QuantUnpacking |
Quant unpacking document. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.external_id |
no | string | null |
"QU-100245" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.status_id |
no | enum:int64 | null |
enum: 1, 4 | 1 - draft/new document. 4 - conducted document. |
1 |
|
data.document_date |
no | string:date | null |
"2026-07-14" |
|||
data.counts |
yes | object |
|
|||
data.counts.source |
yes | number:float |
1 |
|||
data.counts.target |
yes | number:float |
6 |
|||
data.counts.source_moved |
yes | number:float |
0 |
|||
data.counts.target_moved |
yes | number:float |
0 |
|||
data.conducted_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.comment |
no | string | null |
"Unpack coffee box" |
|||
data.items |
no | array<QuantUnpackingItem> |
|
|||
data.items[] |
no | QuantUnpackingItem |
Quant unpacking line. | |
||
data.items[].id |
yes | integer:int64 |
readOnly | min: 1 | 9001 |
|
data.items[].source_product_id |
yes | integer:int64 |
min: 1 | 1200 |
||
data.items[].target_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.items[].source_place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data.items[].target_place_id |
no | integer:int64 | null |
min: 1 | 502 |
||
data.items[].source_quantity |
yes | number:float |
min: 0 | 1 |
||
data.items[].target_quantity |
no | number:float | null |
min: 0 | 6 |
||
data.items[].available_quantity |
no | number:float | null |
min: 0 | 10 |
||
data.items[].batch |
no | string | null |
"LOT-2026" |
|||
data.items[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.items[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.items[].comment |
no | string | null |
"Box unpacked" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Send Documents
List send documents
| operationId | listSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Returns send documents visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 100 |
Number of records per page. Default is 20; maximum is 100. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
20 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, document_date, status_id, warehouse_id, order_count, processing_mode, pipeline_state, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
include |
query | no | 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 | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
delivery_service_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by delivery_service_id using exact matching. The same filter may also be sent as filter[delivery_service_id] where supported by the Laravel query adapter. |
1 |
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
processing_mode |
query | no | string |
form | true | Filter by processing_mode using exact matching. The same filter may also be sent as filter[processing_mode] where supported by the Laravel query adapter. |
"standard" |
|
pipeline_state |
query | no | string |
form | true | Filter by pipeline_state using exact matching. The same filter may also be sent as filter[pipeline_state] where supported by the Laravel query adapter. |
"open" |
|
wb_fulfillment_state |
query | no | string |
form | true | Filter by wb_fulfillment_state using exact matching. The same filter may also be sent as filter[wb_fulfillment_state] where supported by the Laravel query adapter. |
"delivered" |
|
comment |
query | no | string |
form | true | Filter by comment using partial text matching. The same filter may also be sent as filter[comment] where supported by the Laravel query adapter. |
"Priority" |
|
document_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
document_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for document_date. The same filter may also be sent as filter[document_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
updated_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for updated_at. The same filter may also be sent as filter[updated_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<SendDocument> |
|
|||
data[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].status |
no | object | null |
|
|||
data[].status.id |
yes | integer:int64 |
1 |
|||
data[].status.name |
yes | string |
"Открыт" |
|||
data[].status.color |
no | string | null |
"#2457c5" |
|||
data[].status.background_color |
no | string | null |
"#eaf0ff" |
|||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].warehouse |
no | object | null |
|
|||
data[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data[].warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data[].warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data[].delivery_service_ids |
yes | array<integer:int64> |
|
|||
data[].delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data[].delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data[].delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data[].delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data[].delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data[].delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data[].delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data[].delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data[].delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data[].delivery_services[].is_courier |
yes | boolean |
false |
|||
data[].document_date |
no | string:date | null |
"2026-08-11" |
|||
data[].closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].comment |
no | string | null |
"Wildberries shipment 740" |
|||
data[].order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data[].processing |
yes | SendDocumentProcessing |
|
|||
data[].processing.mode |
no | string | null |
"standard" |
|||
data[].processing.pipeline |
yes | array<string> |
|
|||
data[].processing.pipeline[] |
no | string |
"assignment" |
|||
data[].processing.state |
no | string | null |
"open" |
|||
data[].processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data[].processing.batch_profile |
no | object | null |
|
|||
data[].processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data[].processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data[].processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data[].processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data[].wildberries.error_message |
no | string | null |
"" |
|||
data[].wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].wildberries.supplies |
yes | array<object> |
|
|||
data[].wildberries.supplies[] |
no | object |
|
|||
data[].orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data[].orders[] |
no | SendDocumentOrderAssignment |
|
|||
data[].orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data[].orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data[].orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data[].orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data[].orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data[].orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data[].orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data[].orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data[].orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data[].orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data[].orders[].order.amounts |
no | object | null |
|
|||
data[].orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data[].orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data[].orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data[].orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data[].orders[].order.contact |
no | object | null |
|
|||
data[].orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data[].orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data[].orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data[].orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data[].orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data[].orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data[].orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data[].orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data[].orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data[].orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data[].orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data[].orders[].order.delivery |
no | object | null |
|
|||
data[].orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data[].orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data[].orders[].order.delivery.status |
no | string | null |
"created" |
|||
data[].orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data[].orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data[].orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data[].orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data[].orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data[].orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data[].orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data[].orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data[].orders[].order.comments |
no | object | null |
|
|||
data[].orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data[].orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data[].orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data[].orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data[].orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data[].orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data[].orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data[].orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data[].orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data[].orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].orders[].order.offers[].product |
no | object | null |
|
|||
data[].orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data[].orders[].order.offers[].reservation_items |
no | array<OrderReservationItem> |
|
|||
data[].orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data[].orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data[].orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data[].orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data[].orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data[].orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data[].orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data[].orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data[].orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data[].orders[].order.warehouse |
no | object | null |
|
|||
data[].orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data[].orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data[].orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data[].orders[].order.shop |
no | object | null |
|
|||
data[].orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data[].orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data[].orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data[].orders[].order.company |
no | object | null |
|
|||
data[].orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data[].orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data[].orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data[].orders[].order.place |
no | object | null |
|
|||
data[].orders[].order.accumulation_place |
no | object | null |
|
|||
data[].orders[].order.measurements |
no | object | null |
|
|||
data[].orders[].order.settings |
no | object | null |
|
|||
data[].orders[].order.consumables |
yes | array<object> |
|
|||
data[].orders[].order.consumables[] |
no | object |
|
|||
data[].orders[].order.wildberries |
no | object | null |
|
|||
data[].orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data[].orders[].order.batch_matches |
yes | array<object> |
|
|||
data[].orders[].order.batch_matches[] |
no | object |
|
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create send document
| operationId | createSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Create send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateSendDocumentRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateSendDocumentPayload |
Creates an open shipment document. Warehouse and delivery services must be active and visible in tenant scope. | |
||
data.document_date |
yes | string:date |
"2026-08-11" |
|||
data.warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.comment |
no | string | null |
maxLength: 1000 | "Wildberries shipment 740" |
Request examples
default
{
"data": {
"document_date": "2026-08-11",
"warehouse_id": 42,
"delivery_service_ids": [
17
],
"comment": "Wildberries shipment 740"
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get send document
| operationId | getSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Returns one send document when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update send document
| operationId | replaceSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Update send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceSendDocumentRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceSendDocumentPayload |
Shipment document update. Omitted fields remain unchanged; status transitions follow the administrative lifecycle rules. | |
||
data.status_id |
no | integer:int64 | null |
2 |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.delivery_service_ids |
no | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.comment |
no | string | null |
maxLength: 1000 | "Передано перевозчику" |
Request examples
default
{
"data": {
"status_id": 2,
"comment": "Передано перевозчику"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update send document
| operationId | patchSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Update send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchSendDocumentRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchSendDocumentPayload |
Partial shipment document update. Omitted fields remain unchanged. | |
||
data.status_id |
no | integer:int64 | null |
2 |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.delivery_service_ids |
no | array<integer:int64> |
minItems: 1 | |
||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.comment |
no | string | null |
maxLength: 1000 | "Передано перевозчику" |
Request examples
default
{
"data": {
"comment": "Передано перевозчику"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Remove send document
| operationId | deleteSendDocuments |
|---|---|
| Tag | Send Documents |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object | null |
|
|||
meta |
yes | object |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
yes | boolean |
true |
|||
meta.id |
yes | integer:int64 |
min: 1 | 1001 |
Response examples
success
{
"data": null,
"meta": {
"api_version": "v2",
"deleted": true,
"id": 740
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
List send document events
| operationId | listSendDocumentsEvents |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Returns send documents visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/send-documents/740/events" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, happened_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
category |
query | no | string |
form | true | Filter by category using exact matching. The same filter may also be sent as filter[category] where supported by the Laravel query adapter. |
"document" |
|
state |
query | no | string |
form | true | Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. |
"ready" |
|
direction |
query | no | string |
form | true | Filter by direction using exact matching. The same filter may also be sent as filter[direction] where supported by the Laravel query adapter. |
"outbound" |
|
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
event |
query | no | string |
form | true | Filter by event using partial text matching. The same filter may also be sent as filter[event] where supported by the Laravel query adapter. |
"order_attached" |
|
error_message |
query | no | string |
form | true | Filter by error_message using partial text matching. The same filter may also be sent as filter[error_message] where supported by the Laravel query adapter. |
"Remote service rejected the shipment" |
|
happened_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for happened_at. The same filter may also be sent as filter[happened_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
happened_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for happened_at. The same filter may also be sent as filter[happened_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<SendDocumentAuditEvent> |
|
|||
data[] |
no | SendDocumentAuditEvent |
Append-only audit event for a shipment document. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].category |
no | string | null |
"document" |
|||
data[].event |
yes | string |
"order_attached" |
|||
data[].state |
no | string | null |
"open" |
|||
data[].direction |
no | string | null |
"outbound" |
|||
data[].happened_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data[].actor_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data[].actor_type |
no | string | null |
"user" |
|||
data[].request_id |
no | string | null |
"req-740-attach" |
|||
data[].order_id |
no | integer:int64 | null |
min: 1 | 49060 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].entity_type |
no | string | null |
"shipment" |
|||
data[].entity_id |
no | integer:int64 | null |
min: 1 | 740 |
||
data[].context |
yes | object |
|
|||
data[].error_code |
no | string | null |
"" |
|||
data[].error_message |
no | string | null |
"" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Attach orders to send document
| operationId | createSendDocumentsOrders |
|---|---|
| Tag | Send Documents |
| Security | bearerAuth |
Attach orders to send document. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
AttachSendDocumentOrdersRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | array<integer:int64> |
minItems: 1 maxItems: 100 |
|
||
data.order_ids[] |
no | integer:int64 |
min: 1 | 49060 |
Request examples
default
{
"data": {
"order_ids": [
49060
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Detach order from send document
| operationId | deleteSendDocumentsOrders |
|---|---|
| Tag | Send Documents |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shipment document ID. | 740 |
||
orderId |
path | yes | integer:int64 |
min: 1 | Order ID assigned to the shipment document. | 49060 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | 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 |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.status |
no | object | null |
|
|||
data.status.id |
yes | integer:int64 |
1 |
|||
data.status.name |
yes | string |
"Открыт" |
|||
data.status.color |
no | string | null |
"#2457c5" |
|||
data.status.background_color |
no | string | null |
"#eaf0ff" |
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.delivery_service_ids |
yes | array<integer:int64> |
|
|||
data.delivery_service_ids[] |
no | integer:int64 |
min: 1 | 17 |
||
data.delivery_services |
yes | array<SendDocumentDeliveryService> |
|
|||
data.delivery_services[] |
no | SendDocumentDeliveryService |
|
|||
data.delivery_services[].id |
yes | integer:int64 |
min: 1 | 17 |
||
data.delivery_services[].name |
yes | string |
"Wildberries FBS" |
|||
data.delivery_services[].status_id |
yes | integer:int64 |
1 |
|||
data.delivery_services[].external_id |
no | string | null |
"wb-fbs" |
|||
data.delivery_services[].source_id |
no | string | null |
"wildberries" |
|||
data.delivery_services[].delivery_type |
no | string | null |
"pickup_point" |
|||
data.delivery_services[].is_courier |
yes | boolean |
false |
|||
data.document_date |
no | string:date | null |
"2026-08-11" |
|||
data.closed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.comment |
no | string | null |
"Wildberries shipment 740" |
|||
data.order_count |
yes | integer:int64 |
min: 0 | 1 |
||
data.processing |
yes | SendDocumentProcessing |
|
|||
data.processing.mode |
no | string | null |
"standard" |
|||
data.processing.pipeline |
yes | array<string> |
|
|||
data.processing.pipeline[] |
no | string |
"assignment" |
|||
data.processing.state |
no | string | null |
"open" |
|||
data.processing.batch_profile_id |
no | integer:int64 | null |
min: 1 | 31 |
||
data.processing.batch_profile |
no | object | null |
|
|||
data.processing.batch_profile.id |
yes | integer:int64 |
min: 1 | 31 |
||
data.processing.batch_profile.name |
yes | string |
"Standard packing" |
|||
data.processing.batch_profile.processing_mode |
no | string | null |
"standard" |
|||
data.processing.composition_frozen_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.processing.batch_completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.wildberries |
yes | 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 |
no | string | null |
"delivered" |
|||
data.wildberries.error_message |
no | string | null |
"" |
|||
data.wildberries.processed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.wildberries.supplies |
yes | array<object> |
|
|||
data.wildberries.supplies[] |
no | object |
|
|||
data.orders |
yes | array<SendDocumentOrderAssignment> |
|
|||
data.orders[] |
no | SendDocumentOrderAssignment |
|
|||
data.orders[].assignment_id |
yes | integer:int64 |
min: 1 | 8801 |
||
data.orders[].marked_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].created_at |
no | string:date-time | null |
"2026-08-11T09:00:00Z" |
|||
data.orders[].updated_at |
no | string:date-time | null |
"2026-08-11T09:30:00Z" |
|||
data.orders[].order |
yes | object | null |
Complete order snapshot embedded into a shipment document. Marketplace and batch objects preserve provider-specific fields. | |
||
data.orders[].order.id |
yes | integer:int64 |
min: 1 | 49060 |
||
data.orders[].order.external_id |
no | string | null |
"WB-900001234" |
|||
data.orders[].order.status_id |
no | integer:int64 | null |
20 |
|||
data.orders[].order.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.order_date |
no | string:date | null |
"2026-08-10" |
|||
data.orders[].order.send_date |
no | string:date | null |
"2026-08-11" |
|||
data.orders[].order.amounts |
no | object | null |
|
|||
data.orders[].order.amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data.orders[].order.amounts.shipping_cost |
no | number:float | null |
0 |
|||
data.orders[].order.amounts.sum |
no | number:float | null |
39.98 |
|||
data.orders[].order.amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data.orders[].order.contact |
no | object | null |
|
|||
data.orders[].order.contact.first_name |
no | string | null |
"Ivan" |
|||
data.orders[].order.contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data.orders[].order.contact.last_name |
no | string | null |
"Petrov" |
|||
data.orders[].order.contact.phone |
no | string | null |
"+359888123456" |
|||
data.orders[].order.contact.email |
no | string:email | null |
"customer@example.com" |
|||
data.orders[].order.contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.orders[].order.contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data.orders[].order.contact.postcode |
no | string | null |
"1000" |
|||
data.orders[].order.contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data.orders[].order.contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data.orders[].order.contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data.orders[].order.delivery |
no | object | null |
|
|||
data.orders[].order.delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data.orders[].order.delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data.orders[].order.delivery.status |
no | string | null |
"created" |
|||
data.orders[].order.delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data.orders[].order.delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data.orders[].order.delivery.source_id |
no | string | null |
"cdek-15" |
|||
data.orders[].order.delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data.orders[].order.delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data.orders[].order.delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data.orders[].order.delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data.orders[].order.delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data.orders[].order.comments |
no | object | null |
|
|||
data.orders[].order.comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data.orders[].order.comments.inner_text |
no | string | null |
"VIP customer" |
|||
data.orders[].order.offers |
yes | array<SendDocumentOrderLine> |
|
|||
data.orders[].order.offers[] |
no | SendDocumentOrderLine |
|
|||
data.orders[].order.offers[].id |
yes | integer:int64 |
min: 1 | 7001 |
||
data.orders[].order.offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.offers[].quantity |
no | number:float | null |
2 |
|||
data.orders[].order.offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data.orders[].order.offers[].price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.offers[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.orders[].order.offers[].product |
no | object | null |
|
|||
data.orders[].order.offers[].product.id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.orders[].order.offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data.orders[].order.offers[].product.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.offers[].product.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.orders[].order.offers[].product.status_id |
no | enum:int64 | null |
enum: 1, 2, 3 | 1 - active; 2 - disabled; 3 - deleted. |
1 |
|
data.orders[].order.offers[].product.type_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data.orders[].order.offers[].product.article |
no | string | null |
"ART-001245" |
|||
data.orders[].order.offers[].product.sku |
no | string | null |
"SKU-001245" |
|||
data.orders[].order.offers[].product.price |
no | number:float | null |
19.99 |
|||
data.orders[].order.offers[].product.estimated_price |
no | number:float | null |
21.5 |
|||
data.orders[].order.offers[].product.image_url |
no | string:uri | null |
"https://betawms.ffcdek.ru/offer-images/products/coffee-250g.jpg" |
|||
data.orders[].order.offers[].product.dimensions |
yes | Dimensions |
|
|||
data.orders[].order.offers[].product.weight |
yes | Weight |
|
|||
data.orders[].order.offers[].product.datamatrix_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.expiration_required |
yes | boolean |
true |
|||
data.orders[].order.offers[].product.comment |
no | string | null |
"Keep dry" |
|||
data.orders[].order.offers[].product.description |
no | string | null |
"Ground coffee package" |
|||
data.orders[].order.offers[].product.barcodes |
yes | array<ProductBarcode> |
|
|||
data.orders[].order.offers[].product.package |
yes | object |
|
|||
data.orders[].order.offers[].product.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].product.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].reservation |
no | object | null |
Reservation totals for one order line. | |
||
data.orders[].order.offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data.orders[].order.offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data.orders[].order.offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data.orders[].order.offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data.orders[].order.offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data.orders[].order.offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes |
yes | array<DataMatrix> |
|
|||
data.orders[].order.datamatrix_codes[] |
no | DataMatrix |
Marked goods DataMatrix code. | |
||
data.orders[].order.datamatrix_codes[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.orders[].order.datamatrix_codes[].created_at |
no | string:date | null |
readOnly | Stored code upload date; date precision. | "2026-10-19" |
|
data.orders[].order.datamatrix_codes[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.orders[].order.datamatrix_codes[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.orders[].order.datamatrix_codes[].status_id |
no | 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 |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.orders[].order.datamatrix_codes[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.orders[].order.datamatrix_codes[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.orders[].order.datamatrix_codes[].barcode |
no | string | null |
maxLength: 14 | "04601234567890" |
||
data.orders[].order.datamatrix_codes[].short_code |
no | string | null |
maxLength: 14 | "ABC123" |
||
data.orders[].order.datamatrix_codes[].crypto_tail |
no | string | null |
"CRYPTO" |
|||
data.orders[].order.datamatrix_codes[].datamatrix |
no | string | null |
maxLength: 125 | "010460123456789021ABC123" |
||
data.orders[].order.datamatrix_codes[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data.orders[].order.datamatrix_codes[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.orders[].order.datamatrix_codes[].batch |
no | string | null |
"LOT-2026" |
|||
data.orders[].order.datamatrix_codes[].used_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.orders[].order.datamatrix_codes[].accepted_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.datamatrix_codes[].shipped_at |
no | string:date-time | null |
"2026-10-22T10:00:00+03:00" |
|||
data.orders[].order.warehouse |
no | object | null |
|
|||
data.orders[].order.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.orders[].order.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
data.orders[].order.warehouse.type_id |
no | integer:int64 | null |
2 |
|||
data.orders[].order.warehouse.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.orders[].order.shop |
no | object | null |
|
|||
data.orders[].order.shop.id |
yes | integer:int64 |
min: 1 | 12 |
||
data.orders[].order.shop.name |
yes | string |
"Demo Online Store" |
|||
data.orders[].order.shop.status_id |
no | integer:int64 | null |
1 |
|||
data.orders[].order.company |
no | object | null |
|
|||
data.orders[].order.company.id |
yes | integer:int64 |
min: 1 | 7 |
||
data.orders[].order.company.name |
yes | string |
"Demo Company" |
|||
data.orders[].order.company.legal_name |
no | string | null |
"Demo Company Ltd." |
|||
data.orders[].order.place |
no | object | null |
|
|||
data.orders[].order.accumulation_place |
no | object | null |
|
|||
data.orders[].order.measurements |
no | object | null |
|
|||
data.orders[].order.settings |
no | object | null |
|
|||
data.orders[].order.consumables |
yes | array<object> |
|
|||
data.orders[].order.consumables[] |
no | object |
|
|||
data.orders[].order.wildberries |
no | object | null |
|
|||
data.orders[].order.wildberries.completed_at |
no | string:date-time | null |
"2026-08-11T10:15:00Z" |
|||
data.orders[].order.batch_matches |
yes | array<object> |
|
|||
data.orders[].order.batch_matches[] |
no | object |
|
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
SendDocumentConflict
The shipment document lifecycle or composition does not allow the requested operation.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
documentStateConflict
{
"message": "Состав документа уже заморожен.",
"errors": {
"send_document": [
"Состав документа уже заморожен."
]
}
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Shops
List shops
| operationId | listShops |
|---|---|
| Tag | Shops |
| Security | bearerAuth |
Returns shops visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/shops" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, status_id, owner_user_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
domain_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by domain_id using exact matching. The same filter may also be sent as filter[domain_id] where supported by the Laravel query adapter. |
3 |
owner_user_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by owner_user_id using exact matching. The same filter may also be sent as filter[owner_user_id] where supported by the Laravel query adapter. |
15 |
name |
query | no | string |
form | true | Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. |
"Coffee" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Shop> |
|
|||
data[] |
no | Shop |
Merchant shop account. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].name |
yes | string |
"Demo Online Store" |
|||
data[].status_id |
no | integer:int64 | null |
1 |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data[].composite_items_enabled |
no | boolean |
false |
|||
data[].custom_label_enabled |
no | boolean |
false |
|||
data[].custom_label |
no | string | null |
"CDEK label" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create shop
| operationId | createShops |
|---|---|
| Tag | Shops |
| Security | bearerAuth |
Create shop. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateShopRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateShopPayload |
|
|||
data.name |
yes | string |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
Request examples
default
{
"data": {
"name": "Demo Online Store",
"owner_user_id": 15
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Shop |
Merchant shop account. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Demo Online Store" |
|||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get shop
| operationId | getShops |
|---|---|
| Tag | Shops |
| Security | bearerAuth |
Returns one shop when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/shops/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shop ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Shop |
Merchant shop account. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Demo Online Store" |
|||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update shop
| operationId | replaceShops |
|---|---|
| Tag | Shops |
| Security | bearerAuth |
Update shop. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shop ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceShopRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceShopPayload |
Legacy PUT payload. Current backend applies partial-update semantics. | |
||
data.name |
no | string | null |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
Request examples
default
{
"data": {
"name": "Demo Online Store",
"custom_label_enabled": false
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Shop |
Merchant shop account. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Demo Online Store" |
|||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update shop
| operationId | patchShops |
|---|---|
| Tag | Shops |
| Security | bearerAuth |
Update shop. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Shop ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchShopRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchShopPayload |
|
|||
data.name |
no | string | null |
minLength: 1 | "Demo Online Store" |
||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
Request examples
default
{
"data": {
"custom_label_enabled": false
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Shop |
Merchant shop account. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Demo Online Store" |
|||
data.status_id |
no | integer:int64 | null |
1 |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.composite_items_enabled |
no | boolean |
false |
|||
data.custom_label_enabled |
no | boolean |
false |
|||
data.custom_label |
no | string | null |
"CDEK label" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Stock Movements
List stock movements
| operationId | listStockMovements |
|---|---|
| Tag | Stock Movements |
| Security | bearerAuth |
Returns stock movements visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/stock-movements" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, occurred_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
after_id |
query | no | integer:int64 |
form | true | min: 0 | Use sort=id and after_id for incremental export. The after_id boundary is exclusive (id > after_id). The same filter may also be sent as filter[after_id] where supported by the Laravel query adapter. |
1000 |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
document_type_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_type_id using exact matching. The same filter may also be sent as filter[document_type_id] where supported by the Laravel query adapter. |
1 |
document_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. |
5101 |
movement_type |
query | no | string |
form | true | Filter by movement_type using exact matching. The same filter may also be sent as filter[movement_type] where supported by the Laravel query adapter. |
"stock_transfer" |
|
movement_group_id |
query | no | string |
form | true | Filter by movement_group_id using exact matching. The same filter may also be sent as filter[movement_group_id] where supported by the Laravel query adapter. |
"relocation:1722099600000000" |
|
source |
query | no | string |
form | true | Filter by source using exact matching. The same filter may also be sent as filter[source] where supported by the Laravel query adapter. |
"api" |
|
barcode |
query | no | string |
form | true | Filter by barcode using partial text matching. The same filter may also be sent as filter[barcode] where supported by the Laravel query adapter. |
"4601234567890" |
|
batch |
query | no | string |
form | true | Filter by batch using partial text matching. The same filter may also be sent as filter[batch] where supported by the Laravel query adapter. |
"LOT-2026" |
|
occurred_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
occurred_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
production_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
production_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for production_date. The same filter may also be sent as filter[production_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_from |
query | no | string:date |
form | true | Lower inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
expiration_date_to |
query | no | string:date |
form | true | Upper inclusive date boundary for expiration_date. The same filter may also be sent as filter[expiration_date_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<StockMovement> |
|
|||
data[] |
no | StockMovement |
Append-only stock movement journal row. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].movement_type |
yes | 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 |
yes | string | null |
Opaque correlation ID shared by both sides of one relocation or stock-transfer line. | "relocation:1722099600000000" |
||
data[].source |
no | string | null |
"api" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_product_id |
no | integer:int64 | null |
min: 1 | 1200 |
||
data[].quantity_delta |
no | number:float | null |
-2 |
|||
data[].base_quantity_delta |
no | number:float | null |
-12 |
|||
data[].stock_after |
no | number:float | null |
18 |
|||
data[].document |
no | StockMovementDocument |
|
|||
data[].document.type_id |
no | integer:int64 | null |
3 |
|||
data[].document.id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].document.line_id |
no | integer:int64 | null |
min: 1 | 7001 |
||
data[].place_id |
no | integer:int64 | null |
min: 1 | 501 |
||
data[].barcode |
no | string | null |
"4601234567890" |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].occurred_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].transfer_kind |
no | enum | null |
enum: within_warehouse, between_warehouses | "within_warehouse" |
||
data[].operation |
no | enum | null |
enum: reservation_release, physical_issue | Set for new picking audit pairs; null for older and other operations. | "physical_issue" |
|
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Users
List users
| operationId | listUsers |
|---|---|
| Tag | Users |
| Security | bearerAuth |
Returns users visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 50; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, email, domain_id, warehouse_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
domain_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by domain_id using exact matching. The same filter may also be sent as filter[domain_id] where supported by the Laravel query adapter. |
3 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
parent_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by parent_id using exact matching. The same filter may also be sent as filter[parent_id] where supported by the Laravel query adapter. |
1 |
data_scope |
query | no | string |
form | true | Filter by data_scope using exact matching. The same filter may also be sent as filter[data_scope] where supported by the Laravel query adapter. |
"domain" |
|
name |
query | no | string |
form | true | Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. |
"Coffee" |
|
email |
query | no | string |
form | true | Filter by email using partial text matching. The same filter may also be sent as filter[email] where supported by the Laravel query adapter. |
"client.manager@nwms.cloud" |
|
id_from |
query | no | number:float |
form | true | Lower inclusive numeric boundary for id. The same filter may also be sent as filter[id_from] where supported by the Laravel query adapter. |
19.99 |
|
id_to |
query | no | number:float |
form | true | Upper inclusive numeric boundary for id. The same filter may also be sent as filter[id_to] where supported by the Laravel query adapter. |
19.99 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<User> |
|
|||
data[] |
no | User |
Authenticated or visible NWMS user. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].name |
yes | string |
"Client Manager" |
|||
data[].email |
yes | string:email |
"client.manager@nwms.cloud" |
|||
data[].language |
no | string | null |
"en" |
|||
data[].storage_id |
no | string | null |
"default" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].parent_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data[].data_scope |
no | string | null |
"domain" |
|||
data[].roles |
no | array<string> |
|
|||
data[].roles[] |
no | string |
"clients" |
|||
data[].domain |
no | object | null |
|
|||
data[].domain.id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].domain.name |
yes | string |
"Demo Domain" |
|||
data[].warehouse |
no | object | null |
|
|||
data[].warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get user
| operationId | getUsers |
|---|---|
| Tag | Users |
| Security | bearerAuth |
Returns one user when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/users/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | User ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | User |
Authenticated or visible NWMS user. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Client Manager" |
|||
data.email |
yes | string:email |
"client.manager@nwms.cloud" |
|||
data.language |
no | string | null |
"en" |
|||
data.storage_id |
no | string | null |
"default" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.data_scope |
no | string | null |
"domain" |
|||
data.roles |
no | array<string> |
|
|||
data.roles[] |
no | string |
"clients" |
|||
data.domain |
no | object | null |
|
|||
data.domain.id |
yes | integer:int64 |
min: 1 | 3 |
||
data.domain.name |
yes | string |
"Demo Domain" |
|||
data.warehouse |
no | object | null |
|
|||
data.warehouse.id |
yes | integer:int64 |
min: 1 | 42 |
||
data.warehouse.name |
yes | string |
"Warehouse Sofia" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Warehouses
List warehouses
| operationId | listWarehouses |
|---|---|
| Tag | Warehouses |
| Security | bearerAuth |
Returns warehouses visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/warehouses" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, name, status_id, type_id, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
type_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by type_id using exact matching. The same filter may also be sent as filter[type_id] where supported by the Laravel query adapter. |
1 |
domain_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by domain_id using exact matching. The same filter may also be sent as filter[domain_id] where supported by the Laravel query adapter. |
3 |
owner_user_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by owner_user_id using exact matching. The same filter may also be sent as filter[owner_user_id] where supported by the Laravel query adapter. |
15 |
parent_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by parent_id using exact matching. The same filter may also be sent as filter[parent_id] where supported by the Laravel query adapter. |
1 |
country_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by country_id using exact matching. The same filter may also be sent as filter[country_id] where supported by the Laravel query adapter. |
100 |
company_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by company_id using exact matching. The same filter may also be sent as filter[company_id] where supported by the Laravel query adapter. |
7 |
service_provider_company_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by service_provider_company_id using exact matching. The same filter may also be sent as filter[service_provider_company_id] where supported by the Laravel query adapter. |
8 |
name |
query | no | string |
form | true | Filter by name using partial text matching. The same filter may also be sent as filter[name] where supported by the Laravel query adapter. |
"Coffee" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Warehouse> |
|
|||
data[] |
no | Warehouse |
Warehouse or client warehouse. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].name |
yes | string |
"Warehouse Sofia" |
|||
data[].status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data[].type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data[].parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data[].country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data[].currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data[].company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data[].service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data[].billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].settings |
no | WarehouseSettings |
|
|||
data[].settings.datamatrix |
no | object |
|
|||
data[].settings.datamatrix.enabled |
yes | boolean |
false |
|||
data[].settings.datamatrix.type |
no | string | null |
"standard" |
|||
data[].settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data[].settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data[].settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data[].settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data[].settings.production_date_enabled |
no | boolean |
true |
|||
data[].settings.batch_enabled |
no | boolean |
true |
|||
data[].settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data[].settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data[].settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data[].settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data[].document |
no | WarehouseDocument |
|
|||
data[].document.number |
no | string | null |
"WH-DOC-1001" |
|||
data[].document.date |
no | string:date | null |
"2026-07-14" |
|||
data[].custom |
no | object |
Installation-specific warehouse attributes. | {"billing_group":"Sofia A"} |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create warehouse
| operationId | createWarehouses |
|---|---|
| Tag | Warehouses |
| Security | 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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateWarehouseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateWarehousePayload |
|
|||
data.name |
yes | string |
minLength: 1 | "Client Warehouse Varna" |
||
data.type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | object | null |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | object | null |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
{"billing_group":"Varna B"} |
Request examples
default
{
"data": {
"name": "Client Warehouse Varna",
"type_id": 2,
"parent_id": 42
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Warehouse |
Warehouse or client warehouse. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Warehouse Sofia" |
|||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | WarehouseSettings |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | WarehouseDocument |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
Installation-specific warehouse attributes. | {"billing_group":"Sofia A"} |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get warehouse
| operationId | getWarehouses |
|---|---|
| Tag | Warehouses |
| Security | bearerAuth |
Returns one warehouse when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/warehouses/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Warehouse ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Warehouse |
Warehouse or client warehouse. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Warehouse Sofia" |
|||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | WarehouseSettings |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | WarehouseDocument |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
Installation-specific warehouse attributes. | {"billing_group":"Sofia A"} |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update warehouse
| operationId | replaceWarehouses |
|---|---|
| Tag | Warehouses |
| Security | bearerAuth |
Updates editable warehouse fields. Operational flags, document metadata, billing setting, and custom attributes may be changed when permitted.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Warehouse ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceWarehouseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | ReplaceWarehousePayload |
Legacy PUT payload. Current backend applies partial-update semantics. | |
||
data.name |
no | string | null |
minLength: 1 | "Client Warehouse Varna" |
||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | object | null |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | object | null |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
{"billing_group":"Varna B"} |
Request examples
default
{
"data": {
"name": "Client Warehouse Varna",
"billing_setting_id": 12
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Warehouse |
Warehouse or client warehouse. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Warehouse Sofia" |
|||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | WarehouseSettings |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | WarehouseDocument |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
Installation-specific warehouse attributes. | {"billing_group":"Sofia A"} |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update warehouse
| operationId | patchWarehouses |
|---|---|
| Tag | Warehouses |
| Security | bearerAuth |
Update warehouse. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Warehouse ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchWarehouseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | PatchWarehousePayload |
|
|||
data.name |
no | string | null |
minLength: 1 | "Client Warehouse Varna" |
||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | object | null |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | object | null |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
{"billing_group":"Varna B"} |
Request examples
default
{
"data": {
"billing_setting_id": 12
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | Warehouse |
Warehouse or client warehouse. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.name |
yes | string |
"Warehouse Sofia" |
|||
data.status_id |
no | integer:int64 | null |
Warehouse status ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 1 |
||
data.type_id |
no | integer:int64 | null |
Warehouse type ID. Values are database-backed and are not modeled as a closed enum in the public contract. | 2 |
||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.owner_user_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.parent_id |
no | integer:int64 | null |
min: 1 | 41 |
||
data.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data.currency_id |
no | integer:int64 | null |
min: 1 | 978 |
||
data.company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data.service_provider_company_id |
no | integer:int64 | null |
min: 1 | 8 |
||
data.billing_setting_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.settings |
no | WarehouseSettings |
|
|||
data.settings.datamatrix |
no | object |
|
|||
data.settings.datamatrix.enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.type |
no | string | null |
"standard" |
|||
data.settings.datamatrix.acceptance_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.picking_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.packing_enabled |
yes | boolean |
false |
|||
data.settings.datamatrix.validation_mode |
no | 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 |
no | boolean |
true |
|||
data.settings.production_date_enabled |
no | boolean |
true |
|||
data.settings.batch_enabled |
no | boolean |
true |
|||
data.settings.auto_acceptance_enabled |
no | boolean |
false |
|||
data.settings.order_auto_conduct_mode |
no | enum:int64 | null |
enum: 0, 1, 2, 3 | Permission for explicit order auto-conduct actions: 0 = disabled; 1 = skip picking; 2 = skip packing; 3 = skip picking and packing. This setting alone does not perform these actions or confirm carrier handover. Auto-packing is blocked when DataMatrix verification during packing is enabled. | 0 |
|
data.settings.require_acceptance_dimensions |
no | boolean |
false |
|||
data.settings.crossdock_enabled |
no | boolean |
Allows cross-docking for a client warehouse. | true |
||
data.document |
no | WarehouseDocument |
|
|||
data.document.number |
no | string | null |
"WH-DOC-1001" |
|||
data.document.date |
no | string:date | null |
"2026-07-14" |
|||
data.custom |
no | object |
Installation-specific warehouse attributes. | {"billing_group":"Sofia A"} |
||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Cross-docking
List cross-dock cases
| operationId | crossDockListCases |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock cases in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, planned_arrival_at, planned_departure_at, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
include |
query | no | string |
form | false | Comma-separated optional relations. Allowed values: acceptance, orders, targets. The same filter may also be sent as filter[include] where supported by the Laravel query adapter. |
"acceptance,orders,targets" |
|
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
physical_warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by physical_warehouse_id using exact matching. The same filter may also be sent as filter[physical_warehouse_id] where supported by the Laravel query adapter. |
41 |
client_warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by client_warehouse_id using exact matching. The same filter may also be sent as filter[client_warehouse_id] where supported by the Laravel query adapter. |
43 |
acceptance_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. |
1 |
planned_arrival_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for planned_arrival_at. The same filter may also be sent as filter[planned_arrival_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
planned_arrival_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for planned_arrival_at. The same filter may also be sent as filter[planned_arrival_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockCase> |
|
|||
data[] |
no | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].external_id |
no | string | null |
"XD-2026-001" |
|||
data[].domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data[].physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data[].client_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data[].process_version |
yes | string |
"direct_order_v1" |
|||
data[].status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data[].status_before_exception |
no | string | null |
"released" |
|||
data[].plan_hash |
no | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data[].strategy_version |
no | string | null |
"fifo-v1" |
|||
data[].planned_arrival_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].planned_departure_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].planned_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].released_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
yes | integer:int64 |
min: 1 | 4 |
||
data[].acceptance |
no | object | null |
|
|||
data[].acceptance.id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].acceptance.external_id |
no | string | null |
"ASN-100245" |
|||
data[].acceptance.type_id |
yes | integer:int64 |
1 |
|||
data[].acceptance.type_code |
yes | string |
"crossdock" |
|||
data[].acceptance.status_id |
yes | integer:int64 |
1 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 cross-dock case
| operationId | crossDockGetCase |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Get cross-dock case in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.external_id |
no | string | null |
"XD-2026-001" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.client_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.process_version |
yes | string |
"direct_order_v1" |
|||
data.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data.status_before_exception |
no | string | null |
"released" |
|||
data.plan_hash |
no | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data.strategy_version |
no | string | null |
"fifo-v1" |
|||
data.planned_arrival_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.released_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.version |
yes | integer:int64 |
min: 1 | 4 |
||
data.acceptance |
no | object | null |
|
|||
data.acceptance.id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.acceptance.external_id |
no | string | null |
"ASN-100245" |
|||
data.acceptance.type_id |
yes | integer:int64 |
1 |
|||
data.acceptance.type_code |
yes | string |
"crossdock" |
|||
data.acceptance.status_id |
yes | integer:int64 |
1 |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Update cross-dock case metadata
| operationId | crossDockUpdateCaseMetadata |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Update cross-dock case metadata in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockUpdateCaseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 3 |
||
data.external_id |
no | string | null |
maxLength: 190 | "XD-2026-001" |
||
data.planned_arrival_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockCase |
Cross-dock aggregate linking inbound supply, outbound demand, execution, exceptions, and loading. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.public_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data.external_id |
no | string | null |
"XD-2026-001" |
|||
data.domain_id |
yes | integer:int64 |
min: 1 | 3 |
||
data.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.client_id |
no | integer:int64 | null |
min: 1 | 15 |
||
data.process_version |
yes | string |
"direct_order_v1" |
|||
data.status |
yes | enum |
enum: draft, planned, released, in_progress, exception, completed, cancelled | "released" |
||
data.status_before_exception |
no | string | null |
"released" |
|||
data.plan_hash |
no | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
||
data.strategy_version |
no | string | null |
"fifo-v1" |
|||
data.planned_arrival_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_departure_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.released_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.version |
yes | integer:int64 |
min: 1 | 4 |
||
data.acceptance |
no | object | null |
|
|||
data.acceptance.id |
yes | integer:int64 |
min: 1 | 5101 |
||
data.acceptance.external_id |
no | string | null |
"ASN-100245" |
|||
data.acceptance.type_id |
yes | integer:int64 |
1 |
|||
data.acceptance.type_code |
yes | string |
"crossdock" |
|||
data.acceptance.status_id |
yes | integer:int64 |
1 |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock allocations
| operationId | crossDockListAllocations |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock allocations in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/allocations" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
state |
query | no | string |
form | true | Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. |
"ready" |
|
supply_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. |
1 |
demand_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockAllocation> |
|
|||
data[] |
no | CrossDockAllocation |
Planner decision assigning supply to demand. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].supply_id |
yes | integer:int64 |
min: 1 | 4201 |
||
data[].demand_id |
yes | integer:int64 |
min: 1 | 4251 |
||
data[].base_quantity |
yes | number:float |
4 |
|||
data[].released_base_quantity |
no | number:float |
4 |
|||
data[].short_base_quantity |
no | number:float |
0 |
|||
data[].state |
yes | string |
"ready" |
|||
data[].state_before_exception |
no | string | null |
"ready" |
|||
data[].match_score |
no | number:float |
1 |
|||
data[].match_reason |
no | object |
|
|||
data[].match_reason.reason_codes |
no | array<string> |
|
|||
data[].match_reason.reason_codes[] |
no | string |
"base_product_match" |
|||
data[].version |
yes | integer:int64 |
2 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Cancel cross-dock case
| operationId | crossDockCancelCase |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Cancel cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCancelCaseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 3 |
||
data.reason |
yes | string |
maxLength: 5000 | "Supplier cancelled shipment" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"reason": "Supplier cancelled shipment"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Close cross-dock case
| operationId | crossDockCloseCase |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Close cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCloseCaseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 8 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 8
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock demands
| operationId | crossDockListDemands |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock demands in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/demands" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, priority, cutoff_at, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
state |
query | no | string |
form | true | Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. |
"ready" |
|
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
target_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockDemand> |
|
|||
data[] |
no | CrossDockDemand |
Outbound product demand linked to one order and target. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data[].order_line_id |
yes | integer:int64 |
min: 1 | 8201 |
||
data[].target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
yes | number:float |
4 |
|||
data[].base_quantity |
yes | number:float |
4 |
|||
data[].allocated_base_quantity |
no | number:float |
4 |
|||
data[].fulfilled_base_quantity |
no | number:float |
2 |
|||
data[].state |
yes | string |
"released" |
|||
data[].state_before_exception |
no | string | null |
"released" |
|||
data[].priority |
no | integer:int64 |
100 |
|||
data[].cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].ship_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].source_policy |
no | enum | null |
enum: crossdock_only, crossdock_then_stock, stock_allowed | "crossdock_only" |
||
data[].destination_ref |
no | string | null |
"SOF-LANE-1" |
|||
data[].carrier_ref |
no | string | null |
"CDEK" |
|||
data[].route_ref |
no | string | null |
"BG-SOF" |
|||
data[].version |
yes | integer:int64 |
2 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock events
| operationId | crossDockListEvents |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock events in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/events" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, occurred_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
type |
query | no | string |
form | true | Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. |
"inbound" |
|
aggregate_type |
query | no | string |
form | true | Filter by aggregate_type using exact matching. The same filter may also be sent as filter[aggregate_type] where supported by the Laravel query adapter. |
"case" |
|
command_id |
query | no | string |
form | true | Filter by command_id using exact matching. The same filter may also be sent as filter[command_id] where supported by the Laravel query adapter. |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|
occurred_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
occurred_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for occurred_at. The same filter may also be sent as filter[occurred_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockEvent> |
|
|||
data[] |
no | CrossDockEvent |
Append-only cross-dock audit event. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].event_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].aggregate_type |
yes | string |
"case" |
|||
data[].aggregate_id |
yes | string |
"01J2CROSSDOCKCASE000000001" |
|||
data[].aggregate_version |
yes | integer:int64 |
4 |
|||
data[].type |
yes | string |
"crossdock.case.released" |
|||
data[].actor_id |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].source |
yes | string |
"api" |
|||
data[].command_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data[].correlation_id |
no | string:uuid | null |
"4d9d6b9b-9c6d-4d2f-8c80-8f9a4d8b4f01" |
|||
data[].payload |
no | object |
|
|||
data[].occurred_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].recorded_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock exceptions
| operationId | crossDockListExceptions |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock exceptions in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/exceptions" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at, resolved_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
type |
query | no | string |
form | true | Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. |
"inbound" |
|
severity |
query | no | string |
form | true | Filter by severity using exact matching. The same filter may also be sent as filter[severity] where supported by the Laravel query adapter. |
"blocking" |
|
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
task_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by task_id using exact matching. The same filter may also be sent as filter[task_id] where supported by the Laravel query adapter. |
1 |
supply_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. |
1 |
demand_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockException> |
|
|||
data[] |
no | CrossDockException |
Operational discrepancy with explicit resolution history. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKEXCEPTION001" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].supply_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].demand_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].fulfillment_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].handling_unit_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].task_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].type |
yes | string |
"shortage" |
|||
data[].severity |
yes | enum |
enum: warning, blocking | "blocking" |
||
data[].status |
yes | string |
"open" |
|||
data[].expected |
no | object | null |
|
|||
data[].actual |
no | object | null |
|
|||
data[].resolution_policy |
no | string | null |
"fallback" |
|||
data[].resolution_decision |
no | string | null |
"fallback_storage" |
|||
data[].reason |
no | string | null |
"Two units missing" |
|||
data[].movement_group_id |
no | string | null |
"XD-MOVE-4101-2" |
|||
data[].opened_by |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].resolved_by |
no | integer:int64 | null |
min: 1 | 26 |
||
data[].resolved_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
yes | integer:int64 |
1 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Open cross-dock exception
| operationId | crossDockOpenException |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Open cross-dock exception in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockOpenExceptionRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.type |
yes | enum |
enum: shortage, overage, damaged, sku_mismatch, lot_mismatch, expired, unknown_hu, wrong_target, capacity, timeout, cancelled_demand, transport_delay | "shortage" |
||
data.severity |
no | enum |
enum: warning, blocking | "blocking" |
||
data.allocation_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.supply_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.demand_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.fulfillment_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.handling_unit_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.task_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.expected |
no | object | null |
|
|||
data.actual |
no | object | null |
|
|||
data.resolution_policy |
no | string | null |
maxLength: 50 | "fallback" |
||
data.reason |
no | string | null |
maxLength: 5000 | "Two units missing" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"type": "shortage",
"severity": "blocking"
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Execute cross-dock fallback by alias
| operationId | crossDockExecuteFallbackByAlias |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Compatibility alias for the plural fallback command; prefer /fallbacks in new clients.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockFallbackRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.supply_id |
yes | integer:int64 |
min: 1 | 4201 |
||
data.exception_id |
no | integer:int64 | null |
min: 1 | 4951 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.base_quantity |
yes | number:float |
min: 0.0001 | 2 |
||
data.source_place_id |
no | integer:int64 | null |
min: 1 | 800 |
||
data.target_place_id |
yes | integer:int64 |
min: 1 | 950 |
||
data.route |
yes | enum |
enum: storage, quarantine | "quarantine" |
||
data.source_barcode |
no | string | null |
maxLength: 190 | "4601234567890" |
||
data.reason |
no | string | null |
maxLength: 5000 | "Damaged package" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"supply_id": 4201,
"product_id": 1201,
"base_quantity": 2,
"target_place_id": 950,
"route": "quarantine"
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock fallbacks
| operationId | crossDockListFallbacks |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock fallbacks in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fallbacks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
supply_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. |
1 |
exception_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by exception_id using exact matching. The same filter may also be sent as filter[exception_id] where supported by the Laravel query adapter. |
1 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
route |
query | no | string |
form | true | Filter by route using exact matching. The same filter may also be sent as filter[route] where supported by the Laravel query adapter. |
"quarantine" |
|
state |
query | no | string |
form | true | Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. |
"ready" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockFallback> |
|
|||
data[] |
no | CrossDockFallback |
Compensating route from cross-dock flow to storage or quarantine. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKFALLBACK0001" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].supply_id |
yes | integer:int64 |
min: 1 | 4201 |
||
data[].exception_id |
no | integer:int64 | null |
min: 1 | 4951 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
yes | number:float |
2 |
|||
data[].base_quantity |
yes | number:float |
2 |
|||
data[].source_place_id |
no | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
yes | integer:int64 |
min: 1 | 950 |
||
data[].route |
yes | enum |
enum: storage, quarantine | "quarantine" |
||
data[].acceptance_offer_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].warehouse_item_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].state |
yes | string |
"completed" |
|||
data[].reason |
no | string | null |
"Damaged package" |
|||
data[].movement_group_id |
no | string | null |
"XD-FALLBACK-4101-1" |
|||
data[].created_by |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].version |
yes | integer:int64 |
1 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Execute cross-dock fallback
| operationId | crossDockExecuteFallback |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Moves the selected quantity to storage or quarantine while preserving source lineage and resolving the linked exception when supplied.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockFallbackRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.supply_id |
yes | integer:int64 |
min: 1 | 4201 |
||
data.exception_id |
no | integer:int64 | null |
min: 1 | 4951 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.base_quantity |
yes | number:float |
min: 0.0001 | 2 |
||
data.source_place_id |
no | integer:int64 | null |
min: 1 | 800 |
||
data.target_place_id |
yes | integer:int64 |
min: 1 | 950 |
||
data.route |
yes | enum |
enum: storage, quarantine | "quarantine" |
||
data.source_barcode |
no | string | null |
maxLength: 190 | "4601234567890" |
||
data.reason |
no | string | null |
maxLength: 5000 | "Damaged package" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"supply_id": 4201,
"product_id": 1201,
"base_quantity": 2,
"target_place_id": 950,
"route": "quarantine"
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock fulfillments
| operationId | crossDockListFulfillments |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock fulfillments in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/fulfillments" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
state |
query | no | string |
form | true | Filter by state using exact matching. The same filter may also be sent as filter[state] where supported by the Laravel query adapter. |
"ready" |
|
allocation_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by allocation_id using exact matching. The same filter may also be sent as filter[allocation_id] where supported by the Laravel query adapter. |
1 |
supply_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by supply_id using exact matching. The same filter may also be sent as filter[supply_id] where supported by the Laravel query adapter. |
1 |
demand_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by demand_id using exact matching. The same filter may also be sent as filter[demand_id] where supported by the Laravel query adapter. |
1 |
target_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. |
1 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockFulfillment> |
|
|||
data[] |
no | CrossDockFulfillment |
Physically confirmed cross-dock fragment with exact product and quant lineage. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].fragment_uuid |
yes | string:uuid |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
yes | integer:int64 |
min: 1 | 4501 |
||
data[].supply_id |
yes | integer:int64 |
min: 1 | 4201 |
||
data[].demand_id |
yes | integer:int64 |
min: 1 | 4251 |
||
data[].target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data[].handling_unit_id |
no | integer:int64 | null |
min: 1 | 4601 |
||
data[].container_place_id |
no | integer:int64 | null |
min: 1 | 901 |
||
data[].source_warehouse_item_id |
no | integer:int64 | null |
min: 1 | 4701 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
yes | number:float |
2 |
|||
data[].base_quantity |
yes | number:float |
2 |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-07-14" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].state |
yes | string |
"routed" |
|||
data[].source_place_id |
no | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
no | integer:int64 | null |
min: 1 | 900 |
||
data[].movement_group_id |
no | string | null |
"XD-MOVE-4101-1" |
|||
data[].version |
yes | integer:int64 |
1 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock target labels
| operationId | crossDockListTargetLabels |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock target labels in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/labels" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
target_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. |
1 |
version |
query | no | integer:int64 |
form | true | min: 1 | Filter by version using exact matching. The same filter may also be sent as filter[version] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockTargetLabel> |
|
|||
data[] |
no | CrossDockTargetLabel |
Versioned, signed target barcode; only the current ready label can confirm a target. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKLABEL0000001" |
|||
data[].target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data[].version |
yes | integer:int64 |
2 |
|||
data[].barcode |
yes | string |
"XD1.4301.2.signature" |
|||
data[].template_version |
yes | string |
"crossdock-target-v1" |
|||
data[].artifact_ref |
no | string | null |
"crossdock/labels/4401.pdf" |
|||
data[].artifact_hash |
no | string | null |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
|||
data[].status |
yes | string |
"ready" |
|||
data[].reprint_count |
no | integer:int64 |
0 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Create cross-dock print jobs
| operationId | crossDockCreatePrintJobs |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Create cross-dock print jobs in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCreatePrintJobsRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 5 |
||
data.label_ids |
no | array<integer:int64> |
minItems: 1 | |
||
data.label_ids[] |
no | integer:int64 |
min: 1 | 4401 |
||
data.printer_id |
no | integer:int64 | null |
min: 1 | 55 |
||
data.device_id |
no | string | null |
maxLength: 190 | "gate-printer-1" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List case loading-visit associations
| operationId | crossDockListCaseLoadingVisitAssociations |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List case loading-visit associations in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/loading-visits" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
loading_visit_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by loading_visit_id using exact matching. The same filter may also be sent as filter[loading_visit_id] where supported by the Laravel query adapter. |
1 |
document_type |
query | no | string |
form | true | Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. |
"acceptance" |
|
document_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. |
5101 |
role |
query | no | string |
form | true | Filter by role using exact matching. The same filter may also be sent as filter[role] where supported by the Laravel query adapter. |
"outbound" |
|
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockLoadingAssociation> |
|
|||
data[] |
no | CrossDockLoadingAssociation |
Association between a cross-dock document and a loading visit. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data[].loading_visit_id |
yes | integer:int64 |
min: 1 | 6101 |
||
data[].document_type |
yes | string |
"order" |
|||
data[].document_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data[].role |
yes | string |
"outbound" |
|||
data[].status |
yes | string |
"attached" |
|||
data[].created_by |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].detached_by |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].detached_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].visit |
no | object | null |
|
|||
data[].visit.id |
yes | integer:int64 |
min: 1 | 6101 |
||
data[].visit.type |
yes | string |
"outbound" |
|||
data[].visit.status |
yes | string |
"approved" |
|||
data[].visit.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].visit.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].visit.planned_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Attach loading visit to cross-dock case
| operationId | crossDockAttachLoadingVisitToCase |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Attach loading visit to cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockLoadingVisitLinkRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 5 |
||
data.loading_visit_id |
yes | integer:int64 |
min: 1 | 6101 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5,
"loading_visit_id": 6101
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Detach loading visit from cross-dock case
| operationId | crossDockDetachLoadingVisitFromCase |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Detach loading visit from cross-dock case in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockLoadingVisitLinkRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 5 |
||
data.loading_visit_id |
yes | integer:int64 |
min: 1 | 6101 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5,
"loading_visit_id": 6101
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Attach loading visit by path ID
| operationId | crossDockAttachLoadingVisitByPathId |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Attach loading visit by path ID in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
visit |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockLoadingVisitPathLinkRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 5 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Detach loading visit by path ID
| operationId | crossDockDetachLoadingVisitByPathId |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Detach loading visit by path ID in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
visit |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockLoadingVisitPathLinkRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 5 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 5
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Confirm cross-dock loading scan
| operationId | crossDockConfirmLoadingScan |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Confirms that the current target label for an order is loaded into the associated outbound visit.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockLoadingScanRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.loading_visit_id |
yes | integer:int64 |
min: 1 | 6101 |
||
data.order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data.label_barcode |
yes | string |
maxLength: 100 | "XD1.4301.2.signature" |
||
data.device_id |
no | string | null |
maxLength: 190 | "gate-tsd-01" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"loading_visit_id": 6101,
"order_id": 8101,
"label_barcode": "XD1.4301.2.signature"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Replace cross-dock handling-unit manifest
| operationId | crossDockReplaceHandlingUnitManifest |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Atomically replaces the declared SSCC or quant handling-unit manifest and validates barcode ownership and contents.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockReplaceManifestRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 3 |
||
data.handling_units |
yes | array<object> |
|
|||
data.handling_units[] |
no | object |
|
|||
data.handling_units[].barcode_kind |
yes | enum |
enum: sscc, quant | "sscc" |
||
data.handling_units[].barcode |
yes | string |
maxLength: 190 | "046012345678901234" |
||
data.handling_units[].hu_type |
no | enum | null |
enum: box, pallet, tote | "box" |
||
data.handling_units[].contents |
yes | array<object> |
minItems: 1 | |
||
data.handling_units[].contents[] |
no | object |
|
|||
data.handling_units[].contents[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.handling_units[].contents[].quantity |
yes | number:float |
min: 0.0001 | 4 |
||
data.handling_units[].contents[].batch |
no | string | null |
maxLength: 100 | "LOT-2026" |
||
data.handling_units[].contents[].production_date |
no | string:date | null |
"2026-07-14" |
|||
data.handling_units[].contents[].expiration_date |
no | string:date | null |
"2027-01-15" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"handling_units": [
{
"barcode_kind": "sscc",
"barcode": "046012345678901234",
"contents": [
{
"product_id": 1201,
"quantity": 4
}
]
}
]
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock orders
| operationId | crossDockListOrders |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock orders in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/orders" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, send_date, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by status_id using exact matching. The same filter may also be sent as filter[status_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<Order> |
|
|||
data[] |
no | Order |
Outbound warehouse order. Optional relation fields are present when loaded by the controller or requested through include. |
|
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].external_id |
no | string | null |
"ORD-100245" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].type_id |
no | integer:int64 | null |
1 |
|||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].status_id |
no | integer:int64 | null |
Order status ID. The current backend stores status records in the database; values are not modeled as a closed enum in the public contract. | 20 |
||
data[].status |
no | object | null |
|
|||
data[].status.id |
yes | integer:int64 |
20 |
|||
data[].status.name |
yes | string |
"Created" |
|||
data[].status.color |
no | string | null |
"#2457c5" |
|||
data[].status.background_color |
no | string | null |
"#eaf0ff" |
|||
data[].order_date |
no | string:date | null |
"2026-07-14" |
|||
data[].send_date |
no | 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 |
no | integer:int64 | null |
min: 1 | 1 |
||
data[].customer_type |
no | integer:int64 | null |
1 |
|||
data[].is_cod |
no | boolean |
true |
|||
data[].amounts |
no | OrderAmounts |
|
|||
data[].amounts.shipping_price |
no | number:float | null |
8.6 |
|||
data[].amounts.shipping_cost |
no | number:float | null |
0 |
|||
data[].amounts.sum |
no | number:float | null |
39.98 |
|||
data[].amounts.cod_sum |
no | number:float | null |
48.58 |
|||
data[].company_id |
no | integer:int64 | null |
min: 1 | 7 |
||
data[].marking |
yes | OrderMarking |
Marking data expected for products in the order. | |
||
data[].marking.required |
yes | boolean |
Whether the order contains products that require marking data after picking. | true |
||
data[].marking.types |
yes | 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[] |
no | string |
"chestny_znak" |
|||
data[].contact |
no | object | null |
|
|||
data[].contact.first_name |
no | string | null |
"Ivan" |
|||
data[].contact.middle_name |
no | string | null |
"Ivanovich" |
|||
data[].contact.last_name |
no | string | null |
"Petrov" |
|||
data[].contact.phone |
no | string | null |
"+359888123456" |
|||
data[].contact.email |
no | string:email | null |
"customer@example.com" |
|||
data[].contact.country_id |
no | integer:int64 | null |
min: 1 | 100 |
||
data[].contact.city_id |
no | integer:int64 | null |
min: 1 | 200 |
||
data[].contact.postcode |
no | string | null |
"1000" |
|||
data[].contact.latitude |
no | number:float | null |
min: -90 max: 90 |
42.6977 |
||
data[].contact.longitude |
no | number:float | null |
min: -180 max: 180 |
23.3219 |
||
data[].contact.full_address |
no | string | null |
"1 Vitosha Boulevard, Sofia" |
|||
data[].delivery |
no | object | null |
|
|||
data[].delivery.service_id |
no | integer:int64 | null |
min: 1 | 1 |
||
data[].delivery.delivery_type |
yes | 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 |
yes | boolean |
True for door delivery; false for pickup-point delivery or an unknown service type. | true |
||
data[].delivery.status |
no | string | null |
"created" |
|||
data[].delivery.track_number |
no | string | null |
"CDEK-123456789" |
|||
data[].delivery.pickup_point_id |
no | string | null |
"SOFIA-01" |
|||
data[].delivery.source_id |
no | string | null |
"cdek-15" |
|||
data[].delivery.tariff_code |
no | integer:int64 | null |
136 |
|||
data[].delivery.additional_services |
no | 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 |
no | string:uri | null |
"https://betawms.ffcdek.ru/labels/CDEK-123456789.pdf" |
|||
data[].delivery.delivery_date |
no | string:date | null |
"2026-07-16" |
|||
data[].delivery.delivery_time_start |
no | string:time | null |
"09:00:00Z" |
|||
data[].delivery.delivery_time_end |
no | string:time | null |
"18:00:00Z" |
|||
data[].comments |
no | object | null |
|
|||
data[].comments.delivery_service_text |
no | string | null |
"Call before delivery" |
|||
data[].comments.inner_text |
no | string | null |
"VIP customer" |
|||
data[].offers |
no | array<OrderLineEmbedded> |
|
|||
data[].offers[] |
no | 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 |
yes | integer:int64 |
readOnly | min: 1 | 7001 |
|
data[].offers[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].offers[].quantity |
no | number:float | null |
min: 0 | 2 |
||
data[].offers[].estimated_price |
no | number:float | null |
19.5 |
|||
data[].offers[].price |
no | number:float | null |
19.99 |
|||
data[].offers[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].offers[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data[].offers[].operation_user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].offers[].product |
no | object | null |
|
|||
data[].offers[].product.id |
yes | integer:int64 |
readOnly | min: 1 | 1201 |
|
data[].offers[].product.name |
yes | string |
"Coffee 250g" |
|||
data[].offers[].product.external_id |
no | string | null |
"EXT-10045" |
|||
data[].offers[].reservation |
no | OrderReservationLine |
Reservation totals for one order line. | |
||
data[].offers[].reservation.required_qty |
yes | number:float |
3 |
|||
data[].offers[].reservation.reserved_qty |
yes | number:float |
1 |
|||
data[].offers[].reservation.unreserved_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation.missing_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation.status |
yes | 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 |
no | array<OrderReservationItem> |
|
|||
data[].offers[].reservation_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data[].offers[].reservation_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].reservation_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data[].offers[].reservation_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data[].offers[].reservation_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data[].offers[].reservation_items[].required_qty |
yes | number:float |
3 |
|||
data[].offers[].reservation_items[].reserved_qty |
yes | number:float |
1 |
|||
data[].offers[].reservation_items[].unreserved_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation_items[].missing_qty |
yes | number:float |
2 |
|||
data[].offers[].reservation_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data[].offers[].reservation_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data[].offers[].reservation_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data[].offers[].reservation_items[].expanded_from_composite |
yes | boolean |
false |
|||
data[].offers[].reservation_items[].expanded_from_quant |
yes | boolean |
false |
|||
data[].offers[].reservation_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].offers[].reservation_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data[].offers[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].offers[].production_date |
no | string:date | null |
"2026-01-15" |
|||
data[].offers[].requested_lot |
no | WarehouseLot |
|
|||
data[].offers[].requested_lot.batch |
yes | string | null |
"LOT-2026" |
|||
data[].offers[].requested_lot.production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].offers[].requested_lot.expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].offers[].picked_quantity |
no | number:float |
min: 0 | 2 |
||
data[].offers[].fulfillment_lots |
no | 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[] |
no | OrderFulfillmentLot |
|
|||
data[].offers[].fulfillment_lots[].batch |
yes | string | null |
"LOT-2026" |
|||
data[].offers[].fulfillment_lots[].production_date |
yes | string:date | null |
"2026-01-15" |
|||
data[].offers[].fulfillment_lots[].expiration_date |
yes | string:date | null |
"2027-01-15" |
|||
data[].offers[].fulfillment_lots[].warehouse_id |
yes | integer:int64 |
min: 1 | 734 |
||
data[].offers[].fulfillment_lots[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].offers[].fulfillment_lots[].quantity |
yes | number:float |
min: 0 | 2 |
||
data[].reservation |
no | OrderReservation |
Reservation readiness and shortages calculated for the order. | |
||
data[].reservation.ready |
yes | boolean |
false |
|||
data[].reservation.reason |
yes | string | null |
"Not all order products are reserved." |
|||
data[].reservation.expected_total |
yes | number:float |
3 |
|||
data[].reservation.reserved_total |
yes | number:float |
1 |
|||
data[].reservation.unreserved_total |
yes | number:float |
2 |
|||
data[].reservation.missing_total |
yes | number:float |
2 |
|||
data[].reservation.missing_items |
yes | array<OrderReservationItem> |
|
|||
data[].reservation.missing_items[] |
no | OrderReservationItem |
Physical product or expanded component used to explain a reservation shortage. | |
||
data[].reservation.missing_items[].offer_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].reservation.missing_items[].offer_name |
no | string | null |
"Coffee 250g" |
|||
data[].reservation.missing_items[].offer_article |
no | string | null |
"ART-001245" |
|||
data[].reservation.missing_items[].offer_sku |
no | string | null |
"SKU-001245" |
|||
data[].reservation.missing_items[].required_qty |
yes | number:float |
3 |
|||
data[].reservation.missing_items[].reserved_qty |
yes | number:float |
1 |
|||
data[].reservation.missing_items[].unreserved_qty |
yes | number:float |
2 |
|||
data[].reservation.missing_items[].missing_qty |
yes | number:float |
2 |
|||
data[].reservation.missing_items[].status |
yes | 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 |
yes | array<integer:int64> |
|
|||
data[].reservation.missing_items[].source_order_offer_ids[] |
no | integer:int64 |
min: 1 | 7001 |
||
data[].reservation.missing_items[].source |
yes | enum |
enum: order_offer, component, quant, composite_quant | "order_offer" |
||
data[].reservation.missing_items[].expanded_from_composite |
yes | boolean |
false |
|||
data[].reservation.missing_items[].expanded_from_quant |
yes | boolean |
false |
|||
data[].reservation.missing_items[].quant_base_offer_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].reservation.missing_items[].quant_base_multiplicity |
no | number:float | null |
6 |
|||
data[].reservation.error |
yes | boolean |
false |
|||
data[].consumables |
no | array<OrderConsumable> |
|
|||
data[].consumables[] |
no | 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 |
yes | integer:int64 |
min: 1 | 301 |
||
data[].consumables[].order_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data[].consumables[].product_id |
yes | integer:int64 |
min: 1 | 1202 |
||
data[].consumables[].warehouse_id |
yes | integer:int64 | null |
min: 1 | 734 |
||
data[].consumables[].place_id |
yes | integer:int64 | null |
min: 1 | 501 |
||
data[].consumables[].quantity |
yes | number:float |
1 |
|||
data[].consumables[].stock_location_mode |
yes | enum |
enum: placed, unplaced | "unplaced" |
||
data[].consumables[].created_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].consumables[].updated_at |
yes | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].status_history |
no | 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[] |
no | OrderStatusHistoryEvent |
Recorded WMS status transition or explicitly inferred initial status. It does not independently confirm physical carrier handover. | |
||
data[].status_history[].status_id |
yes | integer:int64 |
130 |
|||
data[].status_history[].previous_status_id |
yes | integer:int64 | null |
110 |
|||
data[].status_history[].changed_at |
yes | 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 |
yes | enum |
enum: audit, action_log, inferred | "action_log" |
||
data[].status_history[].inferred |
yes | boolean |
True only for a reconstructed initial status at order creation; this is not a separately recorded transition. | false |
||
data[].status_history_meta |
no | OrderStatusHistoryMeta |
|
|||
data[].status_history_meta.available |
yes | boolean |
At least one event is available. This does not guarantee complete historical coverage. | true |
||
data[].status_history_meta.current_status_matches_history |
yes | boolean |
The last available event has the current order status. False also when history is empty. | true |
||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Create cross-dock order and target
| operationId | crossDockCreateOrderAndTarget |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Creates an outbound order in immutable cross-dock fulfillment mode together with its target and demand rows.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCreateOrderRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.external_id |
no | string | null |
maxLength: 50 | "ORD-XD-001" |
||
data.type_id |
yes | integer:int64 |
min: 1 | 1 |
||
data.group_id |
no | oneOf<string | integer> |
|
|||
data.group_id |
no | string |
maxLength: 255 | "2ФИС" |
||
data.group_id |
no | integer |
Legacy numeric identifiers are also accepted. | |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.send_date |
no | string:date | null |
"2026-07-14" |
|||
data.source_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.customer_type |
no | integer:int64 | null |
|
|||
data.company_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.is_cod |
no | boolean |
false |
|||
data.shipping_price |
no | number:float | null |
7.5 |
|||
data.shipping_cost |
no | number:float | null |
5.0 |
|||
data.crossdock_target |
no | object |
|
|||
data.crossdock_target.type |
no | enum | null |
enum: order, route, staging_lane, dispatch | "order" |
||
data.crossdock_target.name |
no | string | null |
maxLength: 190 | "Lane 7" |
||
data.crossdock_target.destination_ref |
no | string | null |
maxLength: 190 | "SOF" |
||
data.crossdock_target.carrier_ref |
no | string | null |
maxLength: 190 | "CDEK" |
||
data.crossdock_target.route_code |
no | string | null |
maxLength: 190 | "BG-SOF" |
||
data.crossdock_target.place_id |
no | integer:int64 | null |
min: 1 | 900 |
||
data.crossdock_target.priority |
no | integer:int64 | null |
100 |
|||
data.crossdock_target.cutoff_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.lines |
yes | array<object> |
minItems: 1 | |
||
data.lines[] |
no | object |
|
|||
data.lines[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data.lines[].product_external_id |
no | string | null |
maxLength: 190 | "EXT-10045" |
||
data.lines[].quantity |
yes | number:float |
min: 0.0001 | 4 |
||
data.lines[].estimated_price |
no | number:float | null |
min: 0 | 19.99 |
||
data.lines[].price |
no | number:float | null |
min: 0 | 19.99 |
||
data.lines[].production_date |
no | string:date | null |
"2026-07-14" |
|||
data.lines[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data.lines[].batch |
no | string | null |
maxLength: 15 | "LOT-2026" |
||
data.lines[].source_policy |
no | enum | null |
enum: crossdock_only, crossdock_then_stock, stock_allowed | "crossdock_only" |
||
data.lines[].external_line_id |
no | string | null |
maxLength: 190 | "LINE-1" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"type_id": 1,
"is_cod": false,
"lines": [
{
"quantity": 4
}
]
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Plan cross-dock allocation
| operationId | crossDockPlanAllocation |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Calculates direct order allocations from eligible supply to demand using FIFO expiration, priority, and strategy version.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockPlanRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 3 |
||
data.strategy_version |
yes | string |
maxLength: 50 | "fifo-v1" |
||
data.expected_plan_hash |
no | string | null |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"strategy_version": "fifo-v1"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock print jobs
| operationId | crossDockListPrintJobs |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock print jobs in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/print-jobs" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at, dispatched_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
label_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by label_id using exact matching. The same filter may also be sent as filter[label_id] where supported by the Laravel query adapter. |
1 |
target_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. |
1 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
printer_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by printer_id using exact matching. The same filter may also be sent as filter[printer_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockPrintJob> |
|
|||
data[] |
no | CrossDockPrintJob |
Versioned target-label print job with dispatch and device acknowledgement. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKPRINTJOB001" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data[].label_id |
yes | integer:int64 |
min: 1 | 4401 |
||
data[].status |
yes | string |
"ready" |
|||
data[].attempts |
yes | integer:int64 |
0 |
|||
data[].printer_id |
no | integer:int64 | null |
min: 1 | 55 |
||
data[].device_id |
no | string | null |
"gate-printer-1" |
|||
data[].artifact_ref |
no | string | null |
"crossdock/labels/4401.pdf" |
|||
data[].artifact_hash |
no | string | null |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
|||
data[].last_error |
no | string | null |
"printer_offline" |
|||
data[].dispatched_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].acknowledged_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].version |
yes | integer:int64 |
1 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Get crossdock in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/readiness" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Release cross-dock plan
| operationId | crossDockReleasePlan |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Freezes the current plan hash, activates allocations and targets, and creates executable tasks and current labels.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockReleaseRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 4 |
||
data.plan_hash |
yes | string |
minLength: 64 maxLength: 64 |
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 4,
"plan_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Run crossdock action in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCommandRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version. |
|
||
data.command_id |
no | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.barcode |
no | string | null |
"4601234567890" |
|||
data.quantity |
no | number:float | null |
min: 0 | 5 |
||
data.reason |
no | string | null |
"Supervisor-approved operational action" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Get crossdock in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/scan-sessions" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Scan cross-dock source
| operationId | crossDockScanSource |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Recognizes a product, quant, or SSCC at the source place and opens a versioned device-bound scan session with a temporary stock hold.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockSourceScanRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.barcode |
yes | string |
maxLength: 190 | "4601234567890" |
||
data.device_id |
yes | string |
maxLength: 190 | "tsd-01" |
||
data.source_place_id |
yes | integer:int64 |
min: 1 | 800 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"barcode": "4601234567890",
"device_id": "tsd-01",
"source_place_id": 800
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Confirm cross-dock target scan
| operationId | crossDockConfirmTargetScan |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Validates the current target label, commits fulfillment and stock movements, consumes the hold, and advances the linked order.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockTargetScanRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.scan_session_id |
yes | string |
maxLength: 190 | "01J2CROSSDOCKSESSION000001" |
||
data.version |
yes | integer:int64 |
min: 1 | 2 |
||
data.target_barcode |
yes | string |
maxLength: 255 | "XD1.4301.2.signature" |
||
data.device_id |
yes | string |
maxLength: 190 | "tsd-01" |
Request examples
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"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Run crossdock action in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCommandRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
Operation-specific payload. Mutating commands require command_id; versioned aggregates also require the current version. |
|
||
data.command_id |
no | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.barcode |
no | string | null |
"4601234567890" |
|||
data.quantity |
no | number:float | null |
min: 0 | 5 |
||
data.reason |
no | string | null |
"Supervisor-approved operational action" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock supplies
| operationId | crossDockListSupplies |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock supplies in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/supplies" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, product_id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by product_id using exact matching. The same filter may also be sent as filter[product_id] where supported by the Laravel query adapter. |
1201 |
base_product_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by base_product_id using exact matching. The same filter may also be sent as filter[base_product_id] where supported by the Laravel query adapter. |
1200 |
acceptance_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by acceptance_id using exact matching. The same filter may also be sent as filter[acceptance_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockSupply> |
|
|||
data[] |
no | CrossDockSupply |
Inbound quantity available to the cross-dock planner. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].acceptance_id |
yes | integer:int64 |
min: 1 | 5101 |
||
data[].acceptance_line_id |
yes | integer:int64 |
min: 1 | 5201 |
||
data[].lineage_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data[].parent_supply_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data[].quantity |
yes | number:float |
10 |
|||
data[].base_quantity |
yes | number:float |
10 |
|||
data[].received_quantity |
no | number:float |
10 |
|||
data[].received_base_quantity |
no | number:float |
10 |
|||
data[].eligible_base_quantity |
no | number:float |
10 |
|||
data[].allocated_base_quantity |
no | number:float |
8 |
|||
data[].executed_base_quantity |
no | number:float |
5 |
|||
data[].batch |
no | string | null |
"LOT-2026" |
|||
data[].production_date |
no | string:date | null |
"2026-07-14" |
|||
data[].expiration_date |
no | string:date | null |
"2027-01-15" |
|||
data[].quality_state |
no | string |
"accepted" |
|||
data[].external_line_id |
no | string | null |
"ASN-LINE-1" |
|||
data[].version |
yes | integer:int64 |
2 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock targets
| operationId | crossDockListTargets |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock targets in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/targets" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, short_number, created_at. Default: short_number. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"short_number" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
order_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by order_id using exact matching. The same filter may also be sent as filter[order_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockTarget> |
|
|||
data[] |
no | CrossDockTarget |
Physical sorting or dispatch destination for a cross-dock order. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKTARGET000001" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].type |
yes | enum |
enum: order, route, staging_lane, dispatch | "order" |
||
data[].short_number |
yes | integer:int64 |
7 |
|||
data[].name |
no | string | null |
"Lane 7" |
|||
data[].destination_ref |
no | string | null |
"SOF" |
|||
data[].carrier_ref |
no | string | null |
"CDEK" |
|||
data[].route_ref |
no | string | null |
"BG-SOF" |
|||
data[].place_id |
no | integer:int64 | null |
min: 1 | 900 |
||
data[].barcode_token_version |
no | integer:int64 |
2 |
|||
data[].current_label_id |
no | integer:int64 | null |
min: 1 | 4401 |
||
data[].status |
yes | string |
"ready" |
|||
data[].version |
yes | integer:int64 |
3 |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Assign cross-dock target places
| operationId | crossDockAssignTargetPlaces |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Assign cross-dock target places in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockAssignTargetPlacesRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 3 |
||
data.targets |
yes | array<object> |
minItems: 1 maxItems: 500 |
|
||
data.targets[] |
no | object |
|
|||
data.targets[].target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data.targets[].target_version |
yes | integer:int64 |
min: 1 | 2 |
||
data.targets[].target_place_id |
yes | integer:int64 |
min: 1 | 900 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 3,
"targets": [
{
"target_id": 4301,
"target_version": 2,
"target_place_id": 900
}
]
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock tasks
| operationId | crossDockListTasks |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock tasks in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/cases/01J2CROSSDOCKCASE000000001/tasks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
case |
path | yes | string |
Cross-dock case numeric ID or public ULID. | "01J2CROSSDOCKCASE000000001" |
|||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, created_at. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
|
type |
query | no | string |
form | true | Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. |
"inbound" |
|
target_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by target_id using exact matching. The same filter may also be sent as filter[target_id] where supported by the Laravel query adapter. |
1 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockTask> |
|
|||
data[] |
no | CrossDockTask |
Executable cross-dock warehouse task. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].public_id |
yes | string |
"01J2CROSSDOCKTASK0000001" |
|||
data[].case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data[].allocation_id |
no | integer:int64 | null |
min: 1 | 4501 |
||
data[].fulfillment_id |
no | integer:int64 | null |
min: 1 | 4801 |
||
data[].target_id |
no | integer:int64 | null |
min: 1 | 4301 |
||
data[].type |
yes | string |
"move" |
|||
data[].source_place_id |
no | integer:int64 | null |
min: 1 | 800 |
||
data[].target_place_id |
no | integer:int64 | null |
min: 1 | 900 |
||
data[].product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_product_id |
no | integer:int64 | null |
min: 1 | 1201 |
||
data[].base_quantity |
no | number:float | null |
4 |
|||
data[].status |
yes | string |
"ready" |
|||
data[].lease_owner_id |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].lease_until |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].active_scan_session_id |
no | integer:int64 | null |
min: 1 | 4901 |
||
data[].version |
yes | integer:int64 |
1 |
|||
data[].completed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 cross-dock command status
| operationId | crossDockGetCommandStatus |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Returns the persisted idempotent command state and original result for recovery after a timeout.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
commandId |
path | yes | string:uuid |
Idempotent cross-dock command UUID. | "4fe557e8-70f7-4b36-a124-d3afad4041d4" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Resolve cross-dock exception
| operationId | crossDockResolveException |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Resolve cross-dock exception in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
exception |
path | yes | integer:int64 |
min: 1 | Cross-dock exception ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockResolveExceptionRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 1 |
||
data.decision |
yes | enum |
enum: resume, fallback_completed, manual_accept | "resume" |
||
data.reason |
no | string | null |
maxLength: 5000 | "Supervisor approved" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"decision": "resume"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
List cross-dock documents for loading visit
| operationId | crossDockListDocumentsForLoadingVisit |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
List cross-dock documents for loading visit in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
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 request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/loading-visits/1001/documents" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
visit |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 500 |
Number of records per page. Default is 100; maximum is 500. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
100 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id. Default: id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"id" |
document_type |
query | no | string |
form | true | Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. |
"acceptance" |
|
document_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. |
5101 |
role |
query | no | string |
form | true | Filter by role using exact matching. The same filter may also be sent as filter[role] where supported by the Laravel query adapter. |
"outbound" |
|
status |
query | no | string |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
"waiting" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<CrossDockLoadingAssociation> |
|
|||
data[] |
no | CrossDockLoadingAssociation |
Association between a cross-dock document and a loading visit. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data[].loading_visit_id |
yes | integer:int64 |
min: 1 | 6101 |
||
data[].document_type |
yes | string |
"order" |
|||
data[].document_id |
yes | integer:int64 |
min: 1 | 8101 |
||
data[].role |
yes | string |
"outbound" |
|||
data[].status |
yes | string |
"attached" |
|||
data[].created_by |
no | integer:int64 | null |
min: 1 | 25 |
||
data[].detached_by |
no | integer:int64 | null |
min: 1 | 1001 |
||
data[].detached_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].visit |
no | object | null |
|
|||
data[].visit.id |
yes | integer:int64 |
min: 1 | 6101 |
||
data[].visit.type |
yes | string |
"outbound" |
|||
data[].visit.status |
yes | string |
"approved" |
|||
data[].visit.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
data[].visit.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].visit.planned_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Acknowledge cross-dock print job
| operationId | crossDockAcknowledgePrintJob |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Acknowledge cross-dock print job in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
job |
path | yes | integer:int64 |
min: 1 | Cross-dock print job ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockAcknowledgePrintJobRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 2 |
||
data.success |
yes | boolean |
true |
|||
data.artifact_hash |
no | string | null |
minLength: 64 maxLength: 64 |
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" |
||
data.error |
no | string | null |
maxLength: 5000 | "printer_offline" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 2,
"success": true
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Dispatch cross-dock print job
| operationId | crossDockDispatchPrintJob |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Dispatch cross-dock print job in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
job |
path | yes | integer:int64 |
min: 1 | Cross-dock print job ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockDispatchPrintJobRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 1 |
||
data.printer_id |
no | integer:int64 | null |
min: 1 | 55 |
||
data.device_id |
no | string | null |
maxLength: 190 | "gate-printer-1" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 cross-dock scan session
| operationId | crossDockGetScanSession |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Get cross-dock scan session in the isolated cross-dock execution context.
The result is restricted to the authenticated API v2 tenant scope. Collection endpoints support the documented filters, sorting, and pagination.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/crossdock/scan-sessions/01J2CROSSDOCKSESSION000001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
session |
path | yes | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockScanSession |
Device-bound source scan session waiting for quantity or target confirmation. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.public_id |
yes | string |
"01J2CROSSDOCKSESSION000001" |
|||
data.case_id |
yes | integer:int64 |
min: 1 | 4101 |
||
data.task_id |
yes | integer:int64 |
min: 1 | 4551 |
||
data.allocation_id |
yes | integer:int64 |
min: 1 | 4501 |
||
data.target_id |
yes | integer:int64 |
min: 1 | 4301 |
||
data.device_id |
yes | string |
"tsd-01" |
|||
data.source_place_id |
yes | integer:int64 |
min: 1 | 800 |
||
data.recognized_type |
yes | enum |
enum: product, quant, sscc | "product" |
||
data.handling_unit_id |
no | integer:int64 | null |
min: 1 | 1001 |
||
data.product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.base_product_id |
yes | integer:int64 |
min: 1 | 1201 |
||
data.quantity_mode |
no | string |
"manual" |
|||
data.scanned_base_quantity |
no | number:float |
1 |
|||
data.confirmed_base_quantity |
no | number:float |
4 |
|||
data.status |
yes | string |
"awaiting_target" |
|||
data.version |
yes | integer:int64 |
2 |
|||
data.expires_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.committed_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.cancelled_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.next_action |
no | string | null |
"scan_target" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Cancel cross-dock scan session
| operationId | crossDockCancelScanSession |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Cancel cross-dock scan session in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
session |
path | yes | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockCancelScanSessionRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 1 |
||
data.device_id |
yes | string |
maxLength: 190 | "tsd-01" |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"device_id": "tsd-01"
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}
Set cross-dock scan quantity
| operationId | crossDockSetScanQuantity |
|---|---|
| Tag | Cross-docking |
| Security | bearerAuth |
Set cross-dock scan quantity in the isolated cross-dock execution context.
Send an API v2 data envelope and an Idempotency-Key header. Mutations are idempotent by command_id; versioned aggregates reject stale version values with 409.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
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.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
session |
path | yes | string |
Cross-dock scan session numeric ID or public ULID. | "01J2CROSSDOCKSESSION000001" |
|||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CrossDockSetScanQuantityRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | object |
|
|||
data.command_id |
yes | string:uuid |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.version |
yes | integer:int64 |
min: 1 | 1 |
||
data.device_id |
yes | string |
maxLength: 190 | "tsd-01" |
||
data.quantity |
yes | integer:int64 |
min: 1 | 4 |
Request examples
default
{
"data": {
"command_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"version": 1,
"device_id": "tsd-01",
"quantity": 4
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CrossDockResource |
Cross-dock resource. The concrete fields depend on the selected case subresource; unknown future fields are preserved for forward compatibility. | |
||
data.id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.public_id |
no | string | null |
"01J2CROSSDOCKCASE000000001" |
|||
data.case_id |
no | integer:int64 | null |
min: 1 | 4101 |
||
data.status |
no | string | null |
"released" |
|||
data.state |
no | string | null |
"open" |
|||
data.version |
no | integer:int64 | null |
min: 1 | 3 |
||
data.command_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
data.correlation_id |
no | string:uuid | null |
"a3fd7025-9284-4db6-9aaf-70845b9d6ad4" |
|||
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
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 Bad request
CrossDockBadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "BAD_REQUEST",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
401 Authentication required
CrossDockUnauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "AUTH_REQUIRED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
403 Forbidden
CrossDockForbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Not found
CrossDockNotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Conflict
CrossDockConflict
The request conflicts with the current aggregate version or command state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Validation error
CrossDockValidationError
The given data was invalid.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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 Rate limit exceeded
CrossDockTooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
RATE_LIMITED
{
"message": "Rate limit exceeded.",
"errors": {
},
"meta": {
"api_version": "v2",
"error_code": "RATE_LIMITED",
"correlation_id": "4fe557e8-70f7-4b36-a124-d3afad4041d4",
"details": {
}
}
}
500 Internal server error
CrossDockInternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Cross-docking is disabled for the selected client warehouse." |
|||
errors |
yes | object |
{"warehouse_id":["Enable cross-docking in the client warehouse settings."]} |
|||
meta |
yes | CrossDockErrorMeta |
API v2 error metadata for the isolated cross-dock command contract. | |
||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.error_code |
yes | string |
"CROSSDOCK_WAREHOUSE_DISABLED" |
|||
meta.correlation_id |
no | string:uuid | null |
"4fe557e8-70f7-4b36-a124-d3afad4041d4" |
|||
meta.details |
no | object |
{"physical_warehouse_id":42,"client_warehouse_id":43,"shop_id":12} |
Response examples
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": {
}
}
}