Loading Visits
Every operation below is generated from the OpenAPI v2 specification and includes parameters, request fields, response fields, errors, and examples.
Loading Visits
List loading visits
| operationId | listLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Returns loading visits visible to the authenticated account. Use documented query parameters for filtering, sorting, and pagination.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
Unknown read parameters are ignored. per_page is silently capped; use meta.per_page. Date-only boundaries follow the installation's stored calendar dates; ISO timestamps are serialized in UTC. The default general API limit is 600/minute; a user-specific override may apply. Its bucket is shared by authenticated user, not by shop/domain; Retry-After is returned on throttling.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
page |
query | no | integer:int64 |
form | true | min: 1 | Page number. The same filter may also be sent as filter[page] where supported by the Laravel query adapter. |
1 |
per_page |
query | no | integer:int64 |
form | true | min: 1 max: 250 |
Number of records per page. Default is 50; maximum is 250. The same filter may also be sent as filter[per_page] where supported by the Laravel query adapter. |
50 |
sort |
query | no | string |
form | false | pattern: ^-?[A-Za-z0-9_]+(,-?[A-Za-z0-9_]+)*$ | Comma-separated sort fields. Prefix with - for descending order. Allowed fields: id, planned_at, registered_at, queue_number, created_at, updated_at. Default: -id. The same filter may also be sent as filter[sort] where supported by the Laravel query adapter. |
"-id" |
id |
query | no | integer:int64 |
form | true | min: 1 | Filter by id using exact matching. The same filter may also be sent as filter[id] where supported by the Laravel query adapter. |
1001 |
warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by warehouse_id using exact matching. The same filter may also be sent as filter[warehouse_id] where supported by the Laravel query adapter. |
42 |
client_warehouse_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by client_warehouse_id using exact matching. The same filter may also be sent as filter[client_warehouse_id] where supported by the Laravel query adapter. |
43 |
shop_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by shop_id using exact matching. The same filter may also be sent as filter[shop_id] where supported by the Laravel query adapter. |
12 |
type |
query | no | LoadingVisitType |
form | true | Filter by type using exact matching. The same filter may also be sent as filter[type] where supported by the Laravel query adapter. |
|
|
status |
query | no | LoadingVisitStatus |
form | true | Filter by status using exact matching. The same filter may also be sent as filter[status] where supported by the Laravel query adapter. |
|
|
document_type |
query | no | LoadingVisitDocumentType |
form | true | Filter by document_type using exact matching. The same filter may also be sent as filter[document_type] where supported by the Laravel query adapter. |
|
|
document_id |
query | no | integer:int64 |
form | true | min: 1 | Filter by document_id using exact matching. The same filter may also be sent as filter[document_id] where supported by the Laravel query adapter. |
5101 |
driver_phone |
query | no | string |
form | true | Filter by driver_phone using partial text matching. The same filter may also be sent as filter[driver_phone] where supported by the Laravel query adapter. |
"+359888123456" |
|
driver_name |
query | no | string |
form | true | Filter by driver_name using partial text matching. The same filter may also be sent as filter[driver_name] where supported by the Laravel query adapter. |
"Ivan Petrov" |
|
vehicle_number |
query | no | string |
form | true | Filter by vehicle_number using partial text matching. The same filter may also be sent as filter[vehicle_number] where supported by the Laravel query adapter. |
"CB1234AB" |
|
planned_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for planned_at. The same filter may also be sent as filter[planned_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
planned_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for planned_at. The same filter may also be sent as filter[planned_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
registered_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for registered_at. The same filter may also be sent as filter[registered_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
registered_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for registered_at. The same filter may also be sent as filter[registered_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_from |
query | no | string:date |
form | true | Lower inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_from] where supported by the Laravel query adapter. |
"2026-07-14" |
|
created_at_to |
query | no | string:date |
form | true | Upper inclusive date boundary for created_at. The same filter may also be sent as filter[created_at_to] where supported by the Laravel query adapter. |
"2026-07-14" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | array<LoadingVisit> |
|
|||
data[] |
no | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data[].id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data[].created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data[].client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data[].shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data[].user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data[].type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data[].status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data[].queue_number |
no | integer:int64 | null |
17 |
|||
data[].driver |
yes | LoadingVisitDriver |
|
|||
data[].driver.phone |
no | string | null |
"+359888123456" |
|||
data[].driver.name |
no | string | null |
"Ivan Petrov" |
|||
data[].driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data[].document |
yes | LoadingVisitDocument |
|
|||
data[].document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data[].document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data[].document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data[].document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data[].planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data[].registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data[].called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data[].gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data[].comment |
no | string | null |
"ASN-100245" |
|||
data[].warehouse_comment |
no | string | null |
"Gate 2" |
|||
links |
yes | PaginationLinks |
|
|||
links.first |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=1" |
|||
links.last |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
links.prev |
yes | string:uri | null |
|
|||
links.next |
yes | string:uri | null |
"https://betawms.ffcdek.ru/api/v2/orders?page=2" |
|||
meta |
yes | PaginationMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.current_page |
yes | integer:int32 |
min: 1 | 1 |
||
meta.from |
yes | integer:int32 | null |
min: 1 | 1 |
||
meta.last_page |
yes | integer:int32 |
min: 1 | 2 |
||
meta.path |
yes | string:uri |
"https://betawms.ffcdek.ru/api/v2/orders" |
|||
meta.per_page |
yes | integer:int32 |
min: 1 | 50 |
||
meta.to |
yes | integer:int32 | null |
min: 1 | 50 |
||
meta.total |
yes | integer:int32 |
min: 0 | 73 |
Response examples
success
{
"data": [
{
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
}
],
"links": {
"first": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=1",
"last": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=2",
"prev": null,
"next": "https://betawms.ffcdek.ru/api/v2/loading/visits?page=2"
},
"meta": {
"api_version": "v2",
"current_page": 1,
"from": 1,
"last_page": 2,
"path": "https://betawms.ffcdek.ru/api/v2/loading/visits",
"per_page": 50,
"to": 50,
"total": 73
}
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Create loading visit
| operationId | createLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Creates a loading or unloading visit for a warehouse slot. Driver, document link, planned time, and gate fields are validated against the user visible scope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/loading/visits" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
CreateLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | CreateLoadingVisitPayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"type": "inbound",
"warehouse_id": 42,
"planned_at": "2026-07-14T10:00:00Z",
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
}
}
}
Responses
201 Created.
Created.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Get loading visit
| operationId | getLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Returns one loading visit when it exists and is visible to the authenticated account.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request GET "${NWMS_BASE_URL}/api/v2/loading/visits/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"meta": {
"api_version": "v2"
}
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update loading visit
| operationId | replaceLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Update loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PUT "${NWMS_BASE_URL}/api/v2/loading/visits/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
ReplaceLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
no | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"planned_at": "2026-07-14T11:00:00Z",
"gate_id": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Update loading visit
| operationId | patchLoadingVisits |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Update loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
Current backend behavior is legacy partial-update semantics: omitted fields are left unchanged.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request PATCH "${NWMS_BASE_URL}/api/v2/loading/visits/1001" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}" \
--header "Content-Type: application/json" \
--data-binary @request.jsonParameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
PatchLoadingVisitRequest required
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisitWritePayload |
|
|||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.type |
no | enum | null |
enum: inbound, outbound | "inbound" |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.driver |
no | object | null |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
no | object | null |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
Request examples
default
{
"data": {
"gate_id": 3
}
}
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}
Cancel loading visit
| operationId | cancelLoadingVisitByPath |
|---|---|
| Tag | Loading Visits |
| Security | bearerAuth |
Cancel loading visit. The request uses the documented payload schema, validates tenant visibility, and returns a normalized API envelope.
HTTP request example (cURL)
Set your server and token. Replace sample IDs with accessible IDs. For requests with a body, save the applicable JSON example below as request.json and replace sample values before sending. Idempotency-Key identifies one logical operation.
curl --globoff --request POST "${NWMS_BASE_URL}/api/v2/loading/visits/1001/cancel" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${NWMS_TOKEN}" \
--header "Idempotency-Key: ${NWMS_REQUEST_KEY}"Parameters
| Name | In | Required | Type | Style | Explode | Constraints | Description | Example |
|---|---|---|---|---|---|---|---|---|
id |
path | yes | integer:int64 |
min: 1 | Loading visit ID. | 1001 |
||
Idempotency-Key |
header | no | string |
maxLength: 191 | Optional idempotency key for API v2 write requests. Successful 2xx/3xx responses are replayed for the same key and identical payload for one day. The same key with a different payload returns 409. |
"ord-create-20260714-001" |
Request body
No request body.
Responses
200 Successful response.
Successful response.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
data |
yes | LoadingVisit |
Scheduled loading or unloading visit. | |
||
data.id |
yes | integer:int64 |
readOnly | min: 1 | 1001 |
|
data.created_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.updated_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.domain_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.warehouse_id |
no | integer:int64 | null |
min: 1 | 42 |
||
data.client_warehouse_id |
no | integer:int64 | null |
min: 1 | 43 |
||
data.shop_id |
no | integer:int64 | null |
min: 1 | 12 |
||
data.user_id |
no | integer:int64 | null |
min: 1 | 9 |
||
data.type |
yes | LoadingVisitType |
enum: inbound, outbound | "inbound" |
||
data.status |
yes | LoadingVisitStatus |
enum: draft, approved, waiting, called, in_progress, finished, cancelled, no_show | Loading visit lifecycle status stored in rwLoadingVisit. |
"waiting" |
|
data.queue_number |
no | integer:int64 | null |
17 |
|||
data.driver |
yes | LoadingVisitDriver |
|
|||
data.driver.phone |
no | string | null |
"+359888123456" |
|||
data.driver.name |
no | string | null |
"Ivan Petrov" |
|||
data.driver.vehicle_number |
no | string | null |
"CB1234AB" |
|||
data.document |
yes | LoadingVisitDocument |
|
|||
data.document.type |
no | enum | null |
enum: acceptance, order, send_document | "acceptance" |
||
data.document.id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.acceptance_id |
no | integer:int64 | null |
min: 1 | 5101 |
||
data.document.order_id |
no | integer:int64 | null |
min: 1 | 8101 |
||
data.document.send_document_id |
no | integer:int64 | null |
min: 1 | 9101 |
||
data.planned_at |
no | string:date-time | null |
"2026-07-14T10:00:00Z" |
|||
data.registered_at |
no | string:date-time | null |
"2026-07-14T09:55:00Z" |
|||
data.called_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.started_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.finished_at |
no | string:date-time | null |
"2026-07-14T10:30:00Z" |
|||
data.gate_id |
no | integer:int64 | null |
min: 1 | 3 |
||
data.comment |
no | string | null |
"ASN-100245" |
|||
data.warehouse_comment |
no | string | null |
"Gate 2" |
|||
meta |
yes | ResponseMeta |
|
|||
meta.api_version |
yes | enum |
enum: v2 | "v2" |
||
meta.deleted |
no | boolean |
true |
|||
meta.id |
no | integer:int64 | null |
min: 1 | 1001 |
||
meta.command_replayed |
no | boolean |
True when an idempotent cross-dock command returned the original successful result. | false |
||
meta.crossdock_configuration |
no | object | null |
|
|||
meta.crossdock_configuration.physical_warehouse_id |
yes | integer:int64 |
min: 1 | 42 |
||
meta.crossdock_configuration.enabled |
yes | boolean |
true |
|||
meta.crossdock_configuration.process_version |
yes | string |
"direct_order_v1" |
Response examples
success
{
"data": {
"id": 9101,
"domain_id": 3,
"warehouse_id": 42,
"client_warehouse_id": 43,
"shop_id": 12,
"user_id": 15,
"type": "inbound",
"status": "waiting",
"queue_number": 17,
"driver": {
"phone": "+359888123456",
"name": "Ivan Petrov",
"vehicle_number": "CB1234AB"
},
"document": {
"type": "acceptance",
"id": 5101,
"acceptance_id": 5101,
"order_id": null,
"send_document_id": null
},
"planned_at": "2026-07-14T10:00:00Z",
"registered_at": "2026-07-14T09:55:00Z",
"called_at": null,
"started_at": null,
"finished_at": null,
"gate_id": 3,
"comment": "ASN-100245",
"warehouse_comment": "Gate 2",
"created_at": "2026-07-14T09:00:00Z",
"updated_at": "2026-07-14T09:30:00Z"
},
"meta": {
"api_version": "v2"
}
}
400 Bad request
BadRequest
Bad request.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
BAD_REQUEST
{
"message": "Bad request.",
"error": "BAD_REQUEST"
}
401 Authentication required
Unauthorized
Authentication is required.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
AUTH_REQUIRED
{
"message": "Authentication is required.",
"error": "AUTH_REQUIRED"
}
403 Forbidden
Forbidden
The authenticated account is not allowed to perform this action.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
FORBIDDEN
{
"message": "The authenticated account is not allowed to perform this action.",
"error": "FORBIDDEN"
}
404 Not found
NotFound
The requested resource was not found or is outside the authenticated account scope.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
NOT_FOUND
{
"message": "The requested resource was not found or is outside the authenticated account scope.",
"error": "NOT_FOUND"
}
409 Conflict
Conflict
The request conflicts with the current resource state or idempotency key state.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
idempotencyConflict
{
"message": "The idempotency key is already used with a different payload.",
"error": "IDEMPOTENCY_KEY_CONFLICT"
}
422 Validation error
ValidationError
Validation failed.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The given data was invalid." |
|||
error |
no | string |
"VALIDATION_ERROR" |
|||
errors |
yes | object |
{"warehouse_id":["The selected warehouse is invalid."]} |
Response examples
validationError
{
"message": "The given data was invalid.",
"error": "VALIDATION_ERROR",
"errors": {
"warehouse_id": [
"The selected warehouse is invalid."
]
}
}
429 Rate limit exceeded
TooManyRequests
Rate limit exceeded.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"Too Many Attempts." |
|||
error |
yes | string |
"RATE_LIMITED" |
500 Internal server error
InternalServerError
An unexpected server error occurred.
| Field | Required | Type | Flags | Constraints | Description | Example |
|---|---|---|---|---|---|---|
message |
yes | string |
"The request could not be processed." |
|||
error |
yes | string |
"BAD_REQUEST" |
Response examples
INTERNAL_SERVER_ERROR
{
"message": "An unexpected server error occurred.",
"error": "INTERNAL_SERVER_ERROR"
}