Quant Unpackings
Every operation below is generated from the OpenAPI v2 specification and includes parameters, request fields, response fields, errors, and examples.
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"
}