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